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
相关产品推荐
相关产品推荐

