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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:20:13