将列表分成大熊猫中的列

时间:2019-07-17 11:06:30

标签: python pandas dataframe sklearn-pandas

我有一个这样的数据框

df = (pd.DataFrame({'ID': ['ID1', 'ID2', 'ID3'], 
                    'Values': [['AB', 'BC'], np.NaN, ['AB', 'CD']]}))

df

    ID  Values
0   ID1 [AB, BC]
1   ID2   NaN
2   ID3 [AB, CD]

我想将列表中的项目拆分为列,这样

    ID  AB  BC  CD
0   ID1 1   1   0
1   ID2 0   0   0
2   ID3 1   0   1

1 个答案:

答案 0 :(得分:1)

熊猫函数可以很好地处理缺失值,因此将Series.str.joinSeries.str.get_dummies配合使用,DataFrame.pop用于提取列,最后join用于原始数据:

df = df.join(df.pop('Values').str.join('|').str.get_dummies())
print (df)
    ID  AB  BC  CD
0  ID1   1   1   0
1  ID2   0   0   0
2  ID3   1   0   1

编辑:如果值不是列表,则仅列表的字符串表示形式使用ast.literal_eval转换为列表:

import ast

df = (df.join(df.pop('Values')
        .apply(ast.literal_eval)
        .str.join('|')
        .str.get_dummies()))