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

如何使用Pandas批量读取CSV并提取文件名中的站点名作为数据行对应列

解决方法

核心逻辑说明

  • 先对glob返回的文件路径列表做显式排序,固定文件处理顺序,解决拼接顺序混乱的问题
  • 遍历每个文件时,从文件名中拆分提取站点名作为新列,同步调整列结构符合要求
  • 所有单文件处理完成后统一拼接,拼接顺序和文件排序后的顺序完全一致

完整实现代码

import pandas as pd
import glob
import os

pathd = r'C:\\Users\\U321103\\'
all_files = glob.glob(pathd + "/*UNITED STATES.*RADIATION.csv")

# 显式对文件列表排序,默认按文件名升序,有自定义排序需求可修改此处逻辑
all_files.sort()

df_container = []
for fp in all_files:
    # 提取无路径的纯文件名
    filename = os.path.basename(fp)
    # 按.分割文件名,取第三段作为站点名,对应示例的COPPER CROSSING
    plant_name = filename.split('.')[2]
    # 读取csv,usecols指定只读取需要的列,减少内存占用
    # 请将下方<辐射数据实际列名>替换为你文件中辐射列的真实名称
    temp_df = pd.read_csv(fp, usecols=['YYMMDD', 'HHMM', '<辐射数据实际列名>'])
    # 新增站点名列
    temp_df['plant_name'] = plant_name
    # 重命名辐射列为要求的data
    temp_df.rename(columns={'<辐射数据实际列名>': 'data'}, inplace=True)
    # 调整列顺序为要求的结构
    temp_df = temp_df[['plant_name', 'data', 'YYMMDD', 'HHMM']]
    df_container.append(temp_df)

# 按顺序拼接所有数据,重置全局行索引
final_df = pd.concat(df_container, ignore_index=True)

特殊场景补充

如果每个文件的辐射列列名不固定,可取消usecols参数,通过列位置读取辐射数据:
假设文件前两列固定为YYMMDD、HHMM,第三列为辐射数据,可将读取csv的代码替换为:

temp_df = pd.read_csv(fp)
temp_df.columns = ['YYMMDD', 'HHMM', 'data']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:45:05