You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:从字典元素的DataFrame提取列及多CSV公共列提取

解决多CSV文件提取共同列并转数组的问题

嘿,我来帮你搞定这个需求!你已经把CSV文件都存进字典里的DataFrame了,这步做得相当到位,接下来咱们一步步实现找出共同列、提取成数组的功能。

第一步:找出所有文件共有的列标题

首先咱们得先确定哪些列是所有CSV文件都有的,这里用集合的交集操作最方便:

# 假设你的DataFrame字典名叫dfs(比如你循环读取时存在这个字典里)
# 先把每个DataFrame的列名转成集合,存进列表
all_col_sets = [set(df.columns) for df in dfs.values()]
# 计算所有集合的交集,得到所有文件都有的列
common_cols = set.intersection(*all_col_sets)
# 转成列表方便后续索引
common_cols = list(common_cols)

如果担心没有共同列的情况,可以加个小判断:

if not common_cols:
    print("哎呀,所有文件没有共同的列标题哦!")
else:
    print(f"找到的共同列:{common_cols}")
    # 这里继续后续操作

第二步:提取共同列数据为数组

接下来就可以遍历字典里的每个DataFrame,提取这些共同列的数据,转成你需要的数组(比如numpy数组):

方式1:每个文件的共同列存为单独的数组(存在列表里)

# 存储每个文件的共同列数据数组
common_data_arrays = []
for df in dfs.values():
    # 提取共同列,转成numpy数组
    data_array = df[common_cols].to_numpy()
    common_data_arrays.append(data_array)

# 比如要查看第一个文件的共同列数组,直接取common_data_arrays[0]就行

方式2:把所有文件的共同列数据拼接成一个大数组

如果需要把所有数据合并到一起,可以用pd.concat拼接后再转数组:

# 拼接所有DataFrame的共同列,再转成numpy数组
combined_array = pd.concat([df[common_cols] for df in dfs.values()]).to_numpy()

结合你现有代码的完整示例

把这些逻辑整合到你已有的代码里,大概是这样:

import numpy as np
import pandas as pd

r = int(input('How many files do you want to import? '))
dfs = {}  # 用来存储每个CSV对应的DataFrame

# 循环读取文件到字典
for i in range(r):
    file_path = input(f"请输入第{i+1}个文件的路径:")
    dfs[i] = pd.read_csv(file_path)

# 找共同列
all_col_sets = [set(df.columns) for df in dfs.values()]
common_cols = set.intersection(*all_col_sets)
common_cols = list(common_cols)

if not common_cols:
    print("所有文件没有共同的列标题!")
else:
    print(f"找到的共同列:{common_cols}")
    # 提取每个文件的共同列数据为数组
    common_data_arrays = [df[common_cols].to_numpy() for df in dfs.values()]
    
    # 示例:打印第一个文件的共同列数组
    print("\n第一个文件的共同列数据:")
    print(common_data_arrays[0])

这样就能轻松完成你要的功能啦,要是有其他细节调整的需求,比如数组的格式、要不要保留列名之类的,随时改就行~

内容的提问来源于stack exchange,提问作者Blake Moss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:10:07