如何将Pandas DataFrame的多列数据合并为一个列表?
嘿,这个问题我熟!你想要把DataFrame的多列数据转成列表,而不是只拿到列名,对吧?我给你几个高效的解决方法,结合你的场景来演示:
核心思路
你之前用list(df.columns)[0:8]拿到的只是列名的列表,要获取列数据,得先选中目标列(得到一个子DataFrame),再把这个子DataFrame转成列表。
具体方法
假设你的DataFrame是:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10000, 7), columns=list('ABCDEFG'))
1. 按位置快速选多列(高效适合列数多的情况)
如果要选前N列(比如前4列A-D),用iloc按位置切片,再转成列表:
# 选中前4列(索引0到3,左闭右开) selected_df = df.iloc[:, 0:4] # 转成二维列表(每个子列表对应一行的多列值) df1 = selected_df.to_numpy().tolist() # 或者用values属性(兼容旧版pandas) df1 = selected_df.values.tolist()
注:to_numpy()是pandas 0.24+推荐的方法,比values更清晰。
2. 按列名选指定多列(适合选不连续列)
如果要选特定列(比如B、D、F),直接传入列名列表:
selected_df = df[['B', 'D', 'F']] df2 = selected_df.to_numpy().tolist()
如果是连续列名(比如A到E),也可以用loc切片:
selected_df = df.loc[:, 'A':'E'] df3 = selected_df.to_numpy().tolist()
3. 把多列数据扁平化(转成一维列表)
如果想把多列的所有数据按顺序拼成一个一维列表,用flatten():
# 选中C-E列,转成一维列表 flat_list = df.iloc[:, 2:5].values.flatten().tolist()
为什么之前的方法不行?
list(df.columns)[0:8]操作的是列名索引,所以只能得到列名的列表;而我们需要操作的是数据本身,必须先通过iloc/loc/列名列表选中目标列,再转成列表。
内容的提问来源于stack exchange,提问作者user9410826
相关产品推荐
相关产品推荐

