微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Pandas 将 1 列字符串组合转换为多列分类数据

如何解决Python Pandas 将 1 列字符串组合转换为多列分类数据

我正在从事一个分析天气数据的项目。 以下是我的 csv 文件的缩写版本(仅关注最后一列“条件”):

Year,Month,Day,Hour,DOW,Maximum Temperature,Minimum Temperature,Temperature,Precipitation,SNow,SNowDepth,Wind Speed,Visibility,Cloud Cover,Relative Humidity,Conditions
2020,3,5,8,48.0,0.0,10.3,9.9,81.44,Clear
2020,10,56.9,6.3,25.1,55.29,Partially cloudy
2020,9,60.7,14.5,8.1,79.6,91.95,Overcast
2020,62.5,0.01,16.0,7.0,94.7,89.95,"Rain,Overcast"
2020,17,20,1,66.4,0.02,8.7,4.3,68.6,88.78,Partially cloudy"

我想把它转移到这样的地方:

Clear,Partially cloudy,Rain,Overcast
1,0
0,1
0,0

我看到我可以使用下面的代码,但是当我在一个数据中有两个类别时,我不知道如何处理这种情况。

dataset['Conditions'] = dataset['Conditions'].map({1: 'Clear',2: 'Partially cloudy',3: 'Rain',4: 'SNow'})
dataset = pd.get_dummies(dataset,columns=['Conditions'],prefix='',prefix_sep='')

提前谢谢:)

解决方法

您可以使用pd.get_dummies

result = (
    pd.get_dummies(
        df.Conditions.str.split(',',expand=True)
        .stack())
    .sum(level=0)
)

输出:

   Clear  Overcast  Partially cloudy  Rain
0      1         0                 0     0
1      0         0                 1     0
2      0         1                 0     0
3      0         1                 0     1
4      0         0                 1     1
,

尝试 str.split + explode 然后 sum 级别 0:

dummies = pd.get_dummies(
    dataset['Conditions'].str.split(',').explode()
).sum(level=0)

print(dummies)

dummies

   Clear  Overcast  Partially cloudy  Rain
0      1         0                 0     0
1      0         0                 1     0
2      0         1                 0     0
3      0         1                 0     1
4      0         0                 1     1

join返回原始数据帧:

dummies = pd.get_dummies(
    dataset['Conditions'].str.split(',').explode()
).sum(level=0)
# Join Back to dataset
dataset = dataset.drop(columns='Conditions').join(dummies)
print(dataset.to_string())
   Year  Month  Day  Hour  ...  Clear  Overcast  Partially cloudy  Rain
0  2020      3    5     8  ...      1         0                 0     0
1  2020      3    5    10  ...      0         0                 1     0
2  2020      3    9     8  ...      0         1                 0     0
3  2020      3    9    10  ...      0         1                 0     1
4  2020      3   17    20  ...      0         0                 1     1
,
import pandas as pd 
xx = pd.DataFrame([[1,2,"ss"],[2,3,"cc"],[4,"d"]],columns=["v1","v2","s"])
pd.Series(xx["s"]).str.get_dummies()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。