如何在Python Pandas循环函数中读写修改CSV并生成独立DataFrame
在Python Pandas中生成多个独立DataFrame的解决方案
问题描述
需要实现一个Python Pandas函数,完成以下操作:
- 读取指定路径下的5个CSV文件
- 对每个CSV执行聚合操作(示例为删除
COL1列) - 将每个修改后的结果保存为独立的DataFrame
现有代码每次循环都会覆盖df变量,最终仅返回一个DataFrame,需修改代码实现需求。原代码如下:
import os import pandas as pd def xx(): #1. 读取5个csv for el in [col for col in os.listdir("mypath") if col.endswith(".csv")]: df = pd.read_csv(f"path/{el}") #2. 执行聚合操作 df = df.drop("COL1", axis=1) #3. 将每个修改后的csv保存为独立的DataFrames ?????
解决方案
方法1:返回存储DataFrame的字典(推荐)
用字典存储处理后的DataFrame,以CSV文件名(去掉后缀)作为键,方便后续按名称调用:
import os import pandas as pd def process_csvs(): df_dict = {} # 遍历指定路径下的所有CSV文件 for filename in [f for f in os.listdir("mypath") if f.endswith(".csv")]: # 读取CSV文件 df = pd.read_csv(f"mypath/{filename}") # 执行处理操作(删除COL1列) df_processed = df.drop("COL1", axis=1) # 以无后缀的文件名作为键,存入字典 df_key = filename.replace(".csv", "") df_dict[df_key] = df_processed # 返回包含所有处理后DataFrame的字典 return df_dict # 使用示例 processed_dfs = process_csvs() # 调用指定文件对应的DataFrame,比如处理后的data.csv对应: # processed_dfs["data"]
方法2:返回存储DataFrame的列表
如果仅需要按读取顺序获取结果,可使用列表存储:
import os import pandas as pd def process_csvs(): df_list = [] for filename in [f for f in os.listdir("mypath") if f.endswith(".csv")]: df = pd.read_csv(f"mypath/{filename}") df_processed = df.drop("COL1", axis=1) df_list.append(df_processed) return df_list # 使用示例 processed_dfs = process_csvs() # 按索引获取对应DataFrame,比如第一个读取并处理的文件: # processed_dfs[0]
注意事项
- 不建议动态创建
df1、df2这类独立变量,会导致代码难以维护,不符合Python编码规范。 - 确保路径一致性:代码中
mypath需与实际文件路径匹配,避免出现文件找不到的错误。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

