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

从子目录CSV构建DataFrame:列对应子目录的实现问题

解决多子目录CSV合并为DataFrame列的索引重复与NaN问题

我明白你遇到的问题了——你现在用pd.concat(inv)是把所有DataFrame按行堆叠,这就导致每个子目录的数据都被单独放在一段行里,同一日期会重复出现,其他列自然都是NaN,完全不符合你「每列对应一个子目录数据」的目标。咱们调整一下循环逻辑,换个思路来实现:

核心思路修正

  1. 先按子目录维度处理:每个子目录下的所有CSV属于同一列,先把它们合并成一个完整的Series
  2. 用字典存储每个子目录对应的Series(键为子目录名,值为合并后的Series)
  3. 最后将字典转换为DataFrame,自动按索引对齐所有列

修改后的完整代码

import os
import pandas as pd

rootdir = 'D:/Favorites/Michiel/Studie/Master/PV data/CSV/15min/DDW'
yield_current_day = 'Energy Yield of Current Day (kWh)'
# 用字典存储每个子目录的完整数据,键=子目录名,值=对应Series
subdir_data_dict = {}

for subdir, dirs, files in os.walk(rootdir):
    # 跳过根目录本身,只处理子目录
    if subdir == rootdir:
        continue
    # 获取子目录名称(和你之前取最后3位的逻辑保持一致)
    subdir_name = str(subdir)[-3:]
    # 收集当前子目录下所有CSV的目标列数据
    subdir_series_list = []
    for file in files:
        file_path = os.path.join(subdir, file)
        # 读取CSV并提取目标列
        df = pd.read_csv(
            file_path,
            encoding='UTF-16',
            header=1,
            sep='\t',
            index_col='Generated On',
            parse_dates=True
        )
        subdir_series_list.append(df[yield_current_day])
    
    # 合并当前子目录下的所有Series,排序索引并去重重复日期
    merged_subdir_series = pd.concat(subdir_series_list).sort_index()
    # 去除重复索引(如果同一子目录下有重复日期的CSV,保留最后一条数据)
    merged_subdir_series = merged_subdir_series[~merged_subdir_series.index.duplicated(keep='last')]
    
    # 将合并后的Series存入字典
    subdir_data_dict[subdir_name] = merged_subdir_series

# 将字典转换为DataFrame,每个子目录对应一列
final_frame = pd.DataFrame(subdir_data_dict)

关键细节说明

  • 为什么之前的方法失效?:原代码中pd.concat(inv)默认是axis=0(行拼接),相当于把每个子目录的DataFrame依次叠在下面,所以会出现大量重复索引和NaN。现在用字典存储后转DataFrame,是按axis=1(列拼接),自动按索引对齐所有数据。
  • 重复索引处理:如果同一子目录下的CSV有重复日期,用~merged_subdir_series.index.duplicated()可以去除重复项,keep='last'表示保留最后一条数据,你可以根据需求改成'first'。
  • NaN的合理性:如果某些日期在某个子目录没有数据,NaN是正常的;如果是不必要的NaN,可以用final_frame.fillna(0)或者其他填充方式处理,具体取决于你的业务需求。

内容的提问来源于stack exchange,提问作者Michiel Bruinewoud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:22:31