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)
然后使用str
get_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']}}