使用pd.concat合并CSV时遭遇'All objects passed were None'错误求助
解决CSV合并时的ValueError及多重索引设置问题
首先咱们先揪出报错的根源:你写的read_and_add_filename函数确实完成了读取CSV和添加USER ID列的操作,但没有返回处理后的DataFrame!这就导致map遍历每个文件后,返回的全是None,pd.concat接收不到有效的DataFrame对象,自然就抛出了ValueError: All objects passed were None。
接下来咱们一步步修正代码,完成文件合并和多重索引的设置:
1. 修正读取函数,确保返回DataFrame
给函数加上return df语句,同时把USER ID调整为第一列,还要提前处理时间戳类型:
def read_and_add_filename(input_t): # 读取CSV时指定时间戳列,提前转为datetime类型(替换成你实际的时间戳列名) df = pd.read_csv(input_t, parse_dates=['Timestamp']) # 从文件名提取USER ID df['USER ID'] = Path(input_t).stem # 把USER ID移到首列 cols = ['USER ID'] + [col for col in df.columns if col != 'USER ID'] df = df[cols] # 关键:返回处理后的DataFrame return df
2. 合并文件并设置多重索引
在主代码中完成文件合并,再将USER ID和时间戳设置为多重索引,同时增加文件存在性检查避免空列表报错:
import pandas as pd import os import glob from pathlib import Path input_csv_path = 'C:/Users/zebaa/Dropbox/India.Indo/DER/Storage coordination/CSV files/User load csv' # 获取所有匹配的CSV文件路径 file_paths = glob.glob(os.path.join(input_csv_path, "*-id_*.csv")) # 先检查是否找到文件 if not file_paths: print("未找到匹配的CSV文件,请检查路径或文件名格式!") else: # 合并所有文件 df_concat = pd.concat(map(read_and_add_filename, file_paths), ignore_index=False) # 设置USER ID和时间戳为多重索引(替换成你实际的时间戳列名) df_concat = df_concat.set_index(['USER ID', 'Timestamp']) # 可选:保存合并后的结果 df_concat.to_csv('合并后的电力负荷数据.csv') print("文件合并完成,已成功设置多重索引!")
额外注意事项
- 请务必将代码中的
'Timestamp'替换为你CSV文件中实际的时间戳列名称,否则会出现列不存在的错误。 - 提前用
parse_dates转换时间戳类型,能避免后续设置多重索引时出现类型不匹配的问题。 - 合并时保留
ignore_index=False,可以保留原文件的索引信息,不影响最终多重索引的构建。
内容的提问来源于stack exchange,提问作者Zeba Anjum
相关产品推荐
相关产品推荐

