本文主要介绍Python pandas中列的数据是df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]}),有列表类型的列(Series)情况,将列的数据拆分成多行的几种方法。

示例代码:

df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]})
df
Out[458]: 
   A       B
0  1  [1, 2]
1  2  [1, 2]

拆分成多行的效果:

   A  B
0  1  1
1  1  2
3  2  1
4  2  2

1、使用pandas.DataFrame.explode函数拆分成多行

从pandas 0.25开始,列表类型的列(Series)折分成多行,则可以使用以下pandas.DataFrame.explode函数。

df = pd.DataFrame({'A': [1, 2, 3, 4],'B': [[1, 2], [1, 2], [], np.nan]})
df.B = df.B.fillna({i: [] for i in df.index})  # 替换 NaN 使用 []
df.explode('B')
   A    B
0 1 1
0 1 2
1 2 1
1 2 2
2 3 NaN
3 4 NaN

相关文档Python pandas.DataFrame.explode函数方法的使用

2、使用apply和pd.Series拆分成多行

df = pd.DataFrame({'A': [1, 2, 3, 4],'B': [[1, 2], [1, 2], [], np.nan]})
df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
Out[463]: 
A B
0 1 1
1 1 2
0 2 1
1 2 2

注意:此方法易于理解,但不建议在数据量比较大或性能要求较高的情况使用。

3、使用numpy高性能实现

df = pd.DataFrame({'A': [1, 2, 3, 4],'B': [[1, 2], [1, 2], [], np.nan]})
newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
pd.DataFrame(data=newvalues[0],columns=df.columns)
   A  B
0 1 1
1 1 2
2 2 1
3 2 2

相关文档Python Pandas list(列表)数据列拆分成多行的方法

推荐文档