如何将DataFrame的值转换为按行遍历的一维列表?
嗨,我来帮你搞定这个需求!要把DataFrame里的所有数据按行依次存入列表L,有几种实用的方法,我给你拆解清楚:
方法1:用
iterrows()逐行遍历(直观易懂) iterrows()会返回每一行的索引和对应的行数据,非常适合刚接触pandas的朋友理解。你可以嵌套遍历,把每一行的元素逐个追加到列表里:
import pandas as pd # 先模拟一个示例DataFrame(你替换成自己的即可) df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) L = [] # 逐行遍历,下划线用来接收不需要的行索引 for _, row in df.iterrows(): # 遍历当前行的每个元素,追加到L for item in row: L.append(item) print(L) # 输出结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
不过要注意,如果你的DataFrame数据量很大,这种方法的效率会稍低,因为它是纯Python层面的循环。
方法2:用
to_numpy()+扁平化操作(高效推荐) 如果你的数据规模比较大,强烈推荐这种一行搞定的高效方案:先把DataFrame转成numpy数组,再扁平化(把二维数组转成一维),最后转成列表:
L = df.to_numpy().flatten().tolist()
这种方法依赖numpy的向量化操作,速度比iterrows()快很多,处理大数据集时优势明显。
方法3:用
itertuples()遍历(兼顾效率和可读性) itertuples()会返回每行数据的命名元组,遍历速度比iterrows()快不少,同时可读性也不错:
L = [] # index=False表示不返回行索引,只返回行数据元组 for row in df.itertuples(index=False): # 用extend直接把元组里的所有元素批量加到列表 L.extend(row)
extend()可以一次性把元组的所有元素追加到列表,比逐个append更简洁高效。
另外小提醒:如果你的DataFrame里存在缺失值(比如NaN),以上方法都会把NaN保留在列表里。如果需要处理缺失值,可以先对DataFrame做填充,比如df.fillna(0)把缺失值换成0,再执行上述操作。
内容的提问来源于stack exchange,提问作者IndigoChild
相关产品推荐
相关产品推荐

