字符串在数据框的列中时的一种热编码

时间:2019-08-03 08:04:17

标签: pandas numpy dataframe lambda encoding

我在数据框amenities中有列'df'

enter image description here

示例:

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 for Pet Friendly》只是为了方便别人。

enter image description here

1 个答案:

答案 0 :(得分:2)

如果列由字符串填充,请使用Series.str.stripSeries.str.get_dummiesDataFrame.joinMultiLabelBinarizer来添加原始列,还可以根据需要strip ''从{ {1}}:

rename

如果由集合填充,则首先转换为字符串:

df1 = (df['amenities'].str.strip('{}')
                      .str.get_dummies(',')
                      .rename(columns= lambda x: x.strip("'")))
df2 = df[['amenities']].join(df1)

或使用enter image description here

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_)