pandas - 当字符串在数据框列中时的一种热编码
问题描述
amenities
我的数据框有一列“ ”df
例子:
amenities
0 {'TV','Wifi','Heater'}
1 {'Heater','Swimming Pool'}
2 {'Pet friendly','Heater'}
我需要执行一种热编码类型的操作,以便获得这样的新数据帧。
amenities Heater PF SP TV Wifi
0 {'TV','Wifi','Heater'} 1 0 0 1 1
1 {'Heater','Swimming Pool'} 1 0 1 0 0
2 {'Pet friendly','Heater'} 1 1 0 0 0
最好与新列名匹配的字符串。我为宠物友好写了 PF 只是为了方便他人。
解决方案
如果列由字符串填充,则使用Series.str.strip
withSeries.str.get_dummies
和DataFrame.join
for 添加原始列,如果需要,还可以strip
''
从列名中使用rename
:
df1 = (df['amenities'].str.strip('{}')
.str.get_dummies(',')
.rename(columns= lambda x: x.strip("'")))
df2 = df[['amenities']].join(df1)
如果由集合填充首先转换为字符串:
df1 = (df['amenities'].astype(str)
.str.strip('{}')
.str.get_dummies(',')
.rename(columns= lambda x: x.strip("'")))
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df1 = pd.DataFrame(mlb.fit_transform(df['amenities']),columns=mlb.classes_)
df2 = df[['amenities']].join(df1)
print (df2)
amenities Heater Pet friendly Swimming Pool TV Wifi
0 {'TV','Wifi','Heater'} 1 0 0 1 1
1 {'Heater','Swimming Pool'} 1 0 1 0 0
2 {'Pet friendly','Heater'} 1 1 0 0 0
推荐阅读
- python-3.x - conda activate env “没有这样的文件或目录”
- javascript - Java脚本WebSocket onopen事件未触发?
- html - 如何在我的幻灯片中消除点行之间的空间。我的行之间大约有 2.5 英寸。我有 120 张幻灯片,导致三排点
- android-studio - 当我使用 WebView for WhatsApp Web 时,您的浏览器不受支持 - Android Studio
- javascript - 从数组中添加相同的标题
- symfony5 - Symfony 5 Mercure 无法为“https://127.0.0.1:8000/.well-known/mercure”发送更新 SSL 连接错误
- timer - 为什么我们应该在 EJB 中使用 @Startup 进行定时器服务?
- json - 如何在 go 中打印 [][]interface{}?
- javascript - 如何使用一个 Jquery 函数来处理多个 onchange (HTML) 事件
- oracle - 如何将一个分区的数据从一个表及其子表(引用分区)移动到另一个表及其子表(引用分区)?