通过for循环读取多单列CSV合并为DataFrame失败,求解决方案
解决CSV文件合并为单个DataFrame的问题
我来帮你梳理下代码里的问题,然后给出修正后的可行方案~
你的代码里存在几个关键问题:
- 变量名拼写错误:你定义了
index作为日期索引,但创建DataFrame时写成了indices,这会直接触发NameError。 - 列名匹配错误:因为你设置了
header=None读取CSV,所以单列的默认列名是0,而非Dates,调用raw.set_index('Dates')会找不到对应列报错。 - 赋值类型不匹配:你试图把整个
rawDataFrame直接赋值给DF的某一列,这会导致数据类型冲突,应该提取单列的数值内容。
修正后的代码方案
这里针对你描述的"各CSV包含单列数据"的场景,给出最贴合需求的解决方案:
import numpy as np import pandas as pd files = ['a.csv', 'b.csv', 'c.csv'] # 生成日期索引,统一变量名避免混淆 date_index = np.arange(np.datetime64('2010-01-01'), np.datetime64('2010-01-11')) # 初始化空DataFrame,用日期作为索引 DF = pd.DataFrame(index=date_index) for i, f in enumerate(files): # 读取单列CSV,转成Series更方便赋值 raw_series = pd.read_csv(f, header=None, squeeze=True) # 重新索引对齐到目标日期序列,缺失值自动填充NaN aligned_data = raw_series.reindex(date_index) # 将数据加入DF,用文件索引作为列名 DF[f'col_{i}'] = aligned_data print(DF)
关键修正点说明
- 统一变量名,彻底避免拼写错误和与内置函数的冲突;
- 使用
squeeze=True将单列CSV直接转为Series,大幅简化后续的赋值操作; - 通过
reindex确保每个CSV的数据和目标日期索引严格对齐,缺失的日期位置会自动填充NaN; - 用清晰的列名(如
col_0、col_1)区分不同文件的数据,方便后续识别和处理。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

