将列表拆分为 pandas 中的列
Split list into columns in 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
Pandas 函数处理缺失值很好,所以使用 Series.str.join
with Series.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()))
我有一个这样的数据框
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
Pandas 函数处理缺失值很好,所以使用 Series.str.join
with Series.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()))