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

Pandas拆分文件名提取Ticker与Exchange生成可导入SQL的DataFrame

实现方案

核心修改说明

你完全可以在同一行assign()方法内同时完成两个字段的提取,不需要额外编写独立拆分逻辑。拆分规则如下:

  • 提取文件名后按.拆分,取第0位就是Ticker
  • 取.拆分后的第1位,再按_拆分,取第0位就是Exchange

修改后完整代码

更易调试的常规写法:

import pandas as pd
import glob, os

files = glob.glob("H:\\EOD_DATA_RECENT\\DOWNLOADS\\SPLIT_ADJUSTED\\*.csv")

df_list = []
for fp in files:
    file_name = os.path.basename(fp)
    ticker = file_name.split('.')[0]
    exchange = file_name.split('.')[1].split('_')[0]
    tmp_df = pd.read_csv(fp)
    tmp_df['Ticker'] = ticker
    tmp_df['Exchange'] = exchange
    df_list.append(tmp_df)
total_df = pd.concat(df_list, ignore_index=True)

# 直接调整列顺序为你需要的格式即可,不需要单独拆分每一列再拼接
total_df = total_df[['Ticker', 'Exchange', 'Date', 'Open', 'High', 'Low', 'Close', 'Volume']]

如果你偏爱列表推导式的简写方式,也可以写成:

import pandas as pd
import glob, os

files = glob.glob("H:\\EOD_DATA_RECENT\\DOWNLOADS\\SPLIT_ADJUSTED\\*.csv")

df = pd.concat([
    pd.read_csv(fp).assign(
        Ticker=os.path.basename(fp).split('.')[0],
        Exchange=os.path.basename(fp).split('.')[1].split('_')[0]
    ) for fp in files
], ignore_index=True)

# 调整列顺序得到最终表
total_df = df[['Ticker', 'Exchange', 'Date', 'Open', 'High', 'Low', 'Close', 'Volume']]

额外优化说明

你原代码中单独提取每一列再做concat的逻辑是冗余的,读取CSV+assign字段后直接调整列顺序即可得到符合要求的total_df,性能更高也更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:27:00