如何将Pandas表格每行转为列表并添加为新列?
解决Pandas每行转为列表并作为新列的问题
首先,你的需求是把DataFrame的每一行转换成列表,并添加为一个新列——其实你的代码本质上是完全正确的,我们来实际验证一下:
验证你的代码
运行你提供的代码片段:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(low=0, high=10, size=(5, 5))) df['list'] = df.apply(lambda x: x.tolist(), axis=1) print(df)
你会得到类似这样的输出(因为是随机生成的数值,具体数字会有差异):
0 1 2 3 4 list 0 5 9 7 1 5 [5, 9, 7, 1, 5] 1 3 5 0 6 0 [3, 5, 0, 6, 0] 2 8 0 7 3 2 [8, 0, 7, 3, 2] 3 7 7 2 9 3 [7, 7, 2, 9, 3] 4 7 7 8 8 1 [7, 7, 8, 8, 1]
这完全匹配你期望的输出格式:新列里每行都是对应行的数值列表。
如果你运行代码没得到预期结果,可能的原因及解决办法
如果实际运行时没有成功,大概率是以下几种情况:
- Pandas版本过旧:某些非常早期的Pandas版本对
apply结合axis=1处理行的逻辑支持有问题,建议升级到最新稳定版:pip install --upgrade pandas - 列名冲突:如果你的原始DataFrame已经存在名为
list的列,新列会直接覆盖原有数据,建议换个更明确的列名比如row_list:df['row_list'] = df.apply(lambda x: x.tolist(), axis=1) - 数据包含特殊类型:如果你的数据里有字符串、空值(
NaN)等非整数类型,tolist()依然可以正常工作,但列表会保留原始数据类型,比如空值会显示为nan,字符串会原样保留。
大数据量下的高效替代方案
如果你的DataFrame数据量很大,apply的效率可能不够理想,你可以用更高效的to_numpy()结合列表推导式实现:
df['row_list'] = [row.tolist() for row in df.to_numpy()]
这种方法在处理十万级以上数据时,速度会比apply快不少。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

