Python 熊猫为列表列获取虚拟对象
输入:-Python 熊猫为列表列获取虚拟对象,python,pandas,dataframe,Python,Pandas,Dataframe,输入:- empNo name 1234 [ AB, DE ] 5678 [ FG, IJ ] 命令:- dataFrame = dataFrame.join(dataFrame.name.str.join('|').str.get_dummies().add_prefix('dummy_name_')) 上面的命令将dummy“用于列名的每个字符” 输出:- empNo name dum
empNo name
1234 [ AB, DE ]
5678 [ FG, IJ ]
命令:-
dataFrame = dataFrame.join(dataFrame.name.str.join('|').str.get_dummies().add_prefix('dummy_name_'))
上面的命令将dummy“用于列名的每个字符”
输出:-
empNo name dummy_name_A dummy_name_B dummy_name_D dummy_name_E dummy_name_F dummy_name_G dummy_name_I dummy_name_J
1234 [ AB, DE ] 1 1 1 1 0 0 0 0
5678 [ FG, IJ ] 0 0 0 0 1 1 1 1
预期:-
empNo name dummy_name_AB dummy_name_DE dummy_name_FG dummy_name_IJ
1234 [ AB, DE ] 1 1 0 0
5678 [ FG, IJ ] 0 0 1 1
我认为列表不是列表,所以我们使用ast将字符串类型列转换回列表
import ast
df.name=df.name.apply(ast.literal_eval)
然后使用strget_dummies
s=df.name.apply(pd.Series).stack().str.get_dummies().sum(level=0).add_prefix('dummy_name_')
s
dummy_name_AB dummy_name_DE dummy_name_FG dummy_name_IJ
0 1 1 0 0
1 0 0 1 1
然后
数据输入
df.to_dict()
{'empNo': {0: 1234, 1: 5678}, 'name': {0: ['AB', 'DE'], 1: ['FG', 'IJ']}}
奇怪。你能像这样分享你的数据框吗:
print(dataframe.to_dict())
并在这里发布结果。如果它很大,那么使用:print(dataframe.head(2).to_dict())
将它限制为两行。我得到了安东的问题。意外地将列的数据类型转换为[.astype(str)]。我删除了它,我先前的命令工作正常,正如您正确指出的那样。感谢您的帮助。感谢W-B。此命令将输出为dummy_name_u['AB']、dummy_name_['DE']、dummy_name_['AB'、'DE']、dummy_name_['FG']、dummy_name_u['IJ']、dummy_name_u['FG'、'IJ'],并为空列表dummy_name_[]增加一列你能帮我实现上面给出的预期结果吗?@Jenny请检查上面的数据输入,看看我和你之间的差异。我得到了问题W-B。意外地将列的数据类型转换为[.astype(str)]。我删除了它,我先前的命令工作正常,正如您正确指出的那样。谢谢你的帮助。
df.to_dict()
{'empNo': {0: 1234, 1: 5678}, 'name': {0: ['AB', 'DE'], 1: ['FG', 'IJ']}}