Python 将具有不同长度的列表列表的dataframe列复制到不同的列
我有以下数据帧:Python 将具有不同长度的列表列表的dataframe列复制到不同的列,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: df=pd.DataFrame({'column':[[a',0],[b',1]],[b',2]],[c',1],[b',2]]}) df 我不知道有哪些字母,每行的列表数量也不一样。我的目标是让它看起来像这样: a b c 0 0 1 NaN 1 NaN 2 NaN 2 NaN 2 1 可以使用以下方法执行第一步: df['column'].apply(pd.系列) 但是,这个问题的很大一部分仍然存在。
df=pd.DataFrame({'column':[[a',0],[b',1]],[b',2]],[c',1],[b',2]]})
df
我不知道有哪些字母,每行的列表数量也不一样。我的目标是让它看起来像这样:
a b c
0 0 1 NaN
1 NaN 2 NaN
2 NaN 2 1
可以使用以下方法执行第一步:
df['column'].apply(pd.系列)
但是,这个问题的很大一部分仍然存在。如果您使用的是Pandas 0.25+,您可以使用
explode
:
s = df['column'].explode()
(pd.DataFrame(list(s.values), index=s.index)
.set_index(0, append=True)[1]
.unstack()
)
输出:
0 a b c
0 0.0 1.0 NaN
1 NaN 2.0 NaN
2 NaN 2.0 1.0
试试这个
df_final = pd.DataFrame(dict(l) for l in df.column)
Out[129]:
a b c
0 0.0 1 NaN
1 NaN 2 NaN
2 NaN 2 1.0
非常优雅。一个字符稍少的替代方案:
pd.DataFrame(map(dict,df.column))
太棒了!我现在发现,在我的数据中,列表实际上是[value,key],而不是我描述的[key,value],你有解决方案吗?谢谢@rafaelc。是的,map
更简洁。我选择genex/listcomp是因为我喜欢它们:)@ThomasW:你的意思是你的数据是[[0,a],[1,b]
?@ThomasW:只需在内部执行dict comp,而不是直接调用dict
:pd.DataFrame({y:x代表x,y在l}代表df.column中的l)
谢谢你提供的有用方法,我选择了Andy l.的方法,因为它更简洁!
0 a b c
0 0.0 1.0 NaN
1 NaN 2.0 NaN
2 NaN 2.0 1.0
df_final = pd.DataFrame(dict(l) for l in df.column)
Out[129]:
a b c
0 0.0 1 NaN
1 NaN 2 NaN
2 NaN 2 1.0