开发手册 欢迎您!
软件开发者资料库

Python DataFrame 列表类型的列(Series)折分成多行的方法

本文主要介绍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]]})dfOut[458]:    A       B0  1  [1, 2]1  2  [1, 2]

拆分成多行的效果:

   A  B0  1  11  1  23  2  14  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(列表)数据列拆分成多行的方法