如何高效将Pandas DataFrame列合并为嵌套列表
高效生成嵌套列表列的解决方案
针对你需要为DataFrame添加嵌套列表列的需求,这里提供几种比iterrows()高效得多的实现方式:
方法1:Numpy矢量化操作(最优效率)
利用numpy的reshape将二维数组转为三维,再直接转成列表,完全避免循环,效率最高:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(100,4), columns=list('abcd')) # 生成嵌套列表列 df['e'] = df.values.reshape(-1, 1, 4).tolist()
原理:df.values是(100,4)的二维数组,reshape(-1,1,4)将其转为(100,1,4)的三维数组,tolist()后每行就变成了[[a,b,c,d]]的嵌套结构。
方法2:列表推导式
通过遍历df.values的行来生成嵌套列表,比apply和iterrows都快:
df['e'] = [[row.tolist()] for row in df.values]
方法3:apply配合lambda
虽然比前两种慢,但比iterrows高效:
df['e'] = df.apply(lambda x: [x.tolist()], axis=1)
效率对比
- Numpy reshape方法:完全矢量化,速度最快
- 列表推导式:接近矢量化,速度次之
- apply方法:比iterrows快,但仍有行级遍历开销
- iterrows:最慢,不推荐用于大数据量
内容的提问来源于stack exchange,提问作者DS_Testing
相关产品推荐
相关产品推荐

