循环遍历文件时将求和结果存入列表并转换为DataFrame的问题排查
问题排查与修正方案
我帮你梳理下代码里的核心问题,以及对应的修正方案:
代码里的关键错误点
- 列表初始化位置错误:你把
Total_Uncalibr、Total_Cali这些列表都放在了文件遍历的循环内部,导致每处理一个文件,列表就会被重置为空,之前的求和结果全部丢失。必须把列表初始化移到外层循环外面。 - 无意义的嵌套循环:你写的那些嵌套循环完全不符合Python语法(比如
for Total_Uncalibrated:),而且求和结果是单一数值,直接追加到列表即可,根本不需要嵌套循环。 - 列名未加引号:
df[Last_Price]这种写法会把Last_Price当成变量,但它实际是DataFrame的列名,应该用字符串形式df['Last Price'](注意原数据列名带空格)。 - 拼写与变量混乱:
pd.Dataframe应该是pd.DataFrame(首字母大写),还有变量名前后不一致(比如TotalCS01_Ab和TotalCS01_Abs),这些都会直接导致报错。
修正后的完整代码
import pandas as pd import os # 1. 先初始化三个空列表,放在外层循环外面,确保结果能持续追加 total_uncalibrated_list = [] total_calibrated_list = [] total_updated_price_list = [] # 假设files是你获取到的所有CSV文件路径列表,比如用glob或os.listdir获取 # 示例:files = [f for f in os.listdir("./your_directory") if f.endswith(".csv")] for file in files: # 读取CSV文件,注意分隔符是| df = pd.read_csv(file, sep="|", low_memory=False) # 对指定列求和,列名必须用字符串匹配原数据 sum_uncalibrated = df['Last Price'].sum() sum_calibrated = df['Discount'].sum() sum_updated_price = df['Updated Price'].sum() # 直接把单个求和结果追加到列表,无需嵌套循环 total_uncalibrated_list.append(sum_uncalibrated) total_calibrated_list.append(sum_calibrated) total_updated_price_list.append(sum_updated_price) # 把三个列表转换成DataFrame,每个列表对应一列 result_df = pd.DataFrame({ "Total_Uncalibrated": total_uncalibrated_list, "Total_Calibrated": total_calibrated_list, "Total_Updated_Price": total_updated_price_list }) # 如果需要按行合并(每个文件的三个结果作为一行),上面的写法就可以;如果是按列拼接,用pd.concat: # result_df = pd.concat([ # pd.Series(total_uncalibrated_list, name="Total_Uncalibrated"), # pd.Series(total_calibrated_list, name="Total_Calibrated"), # pd.Series(total_updated_price_list, name="Total_Updated_Price") # ], axis=1) print(result_df)
代码逻辑说明
- 先在外层循环外初始化三个空列表,保证每次处理文件时,新的求和结果能追加到已有列表中,不会被重置。
- 遍历每个文件,读取后直接对目标列求和,得到单一数值。
- 把每个数值直接追加到对应的列表,这一步不需要任何嵌套循环——因为每个文件只产生一个求和值。
- 最后将三个列表转换为DataFrame,你可以根据需求选择按列合并(每个列表作为一列)或按行合并。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

