
本文介绍如何将多个股票csv文件读取为pandas dataframe,为每份数据添加对应股票代码(symbol)列,再纵向合并为单一dataframe,并按date列升序排序。方法简洁高效,适用于批量处理多只股票的历史行情数据。
本文介绍如何将多个股票csv文件读取为pandas dataframe,为每份数据添加对应股票代码(symbol)列,再纵向合并为单一dataframe,并按date列升序排序。方法简洁高效,适用于批量处理多只股票的历史行情数据。
在量化分析或金融数据处理中,常需整合多只股票的OHLCV(开盘价、最高价、最低价、收盘价、成交量)历史数据。假设你有 ['AAPL', 'TSLA', 'GOOG'] 等股票的独立CSV文件(如 AAPL.csv、TSLA.csv),每份均含 Date, Open, High, Low, Close, Volume 等列,目标是:
✅ 为每个子DataFrame新增一列 sym,值为对应股票代码;
✅ 将所有子DataFrame垂直拼接为一个统一DataFrame;
✅ 按 Date 列升序排序(确保时间序列连续且有序);
✅ 重置索引,获得整洁、可直接用于分析的最终结果。
推荐使用以下清晰、可读性强且内存友好的三步法(基于列表推导 + pd.concat + sort_values):
import pandas as pd
sym_list = ['AAPL', 'TSLA', 'GOOG']
file_path_template = r'--some path--{}.csv' # 替换为你的实际路径,例如: r'data/stocks/{}.csv'
# 步骤1:逐个读取CSV,添加symbol列,存入列表
dfs = []
for symbol in sym_list:
print(f"正在加载 {symbol}...")
df = pd.read_csv(file_path_template.format(symbol))
df = df.assign(sym=symbol) # 新增列,值为当前symbol(等价于 df['sym'] = symbol)
dfs.append(df)
# 步骤2:纵向合并所有DataFrame
final_df = pd.concat(dfs, ignore_index=True)
# 步骤3:按Date排序(注意:确保Date列为datetime类型以获得正确时序排序)
final_df['Date'] = pd.to_datetime(final_df['Date']) # 强制转换为datetime(强烈建议!)
final_df = final_df.sort_values('Date', ignore_index=True)? 关键注意事项:
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
- ignore_index=True 在 pd.concat() 和 sort_values() 中均需显式指定,否则原始索引可能重复或错乱;
- pd.to_datetime() 对 Date 列的类型转换至关重要——若未转为 datetime64,字符串格式的日期排序(如 '2023-01-10' vs '2023-01-2')将产生逻辑错误;
- 若CSV中日期含时分秒或存在时区,可在 pd.to_datetime() 中添加 format 或 utc=True 参数进一步校准;
- 如需保留原始文件顺序(非时间顺序),可跳过 sort_values,但金融分析场景下按日期排序通常是刚需。
? 进阶提示:若文件数量极大(如数百只股票),可考虑使用 dask.dataframe 或 polars 提升IO与拼接性能;对于简单任务,上述Pandas方案已足够稳健高效。
最终得到的 final_df 是一个标准二维表格,列包括 Date, Open, High, Low, Close, Volume, sym,行按交易日期严格升序排列,可直接用于后续的分组分析(如 final_df.groupby('sym'))、时间序列建模或可视化。

















