如何将无表头CSV文件对应的DataFrame中所有列合并为一个列表
如何将无表头CSV的DataFrame所有列合并为一维列表
嘿,我来帮你搞定这个问题!你已经走对了第一步——用header=None读取无表头CSV,但你的循环写法会把每一列的Series对象加到列表里,而不是你想要的扁平化数值列表。下面给你几种简洁高效的实现方式:
按列优先合并(先第一列所有值,再第二列,以此类推)
如果你的目标是得到类似[1,3,5,2,4,6,7,8,9]这样的顺序(对应你伪代码的逻辑),可以试试这两种方法:
方法1:用stack()快速扁平化
import pandas as pd df = pd.read_csv('file.csv', header=None) data = df.stack().tolist()
stack()会把DataFrame的列“堆叠”成一维Series,再用tolist()转成普通列表就行,一步到位。
方法2:用melt()提取值列
data = df.melt()['value'].tolist()
melt()会把所有列合并成一个名为value的列,直接提取这个列转列表就搞定了。
按行优先合并(按行顺序展开所有值)
如果你的实际需求是按行的顺序把所有值连起来(比如得到[1,2,7,3,4,8,5,6,9]),可以用更直接的数组扁平化方法:
方法1:values.flatten()
data = df.values.flatten().tolist()
df.values会把DataFrame转成numpy数组,flatten()直接把数组压成一维,再转成列表。
方法2:values.ravel()
data = df.values.ravel().tolist()
ravel()和flatten()效果类似,都是把多维数组转成一维,用法更简洁。
如果你想保留循环的写法
要是你还是想用循环来实现,只需要把append改成extend,并把列转成列表:
data = [] # 用df.shape[1]获取列数,不用硬编码 for col_idx in range(df.shape[1]): data.extend(df[col_idx].tolist())
这样就会把每一列的数值逐个加到data里,而不是把整个Series对象加进去。
内容的提问来源于stack exchange,提问作者ts213445
相关产品推荐
相关产品推荐

