Python Pandas合并(append/concat)后Date列缺失问题排查
问题原因与解决方案
问题根源
nsepy.get_history返回的DataFrame中,Date是索引列而非普通数据列,而pandas.DataFrame.to_csv默认不会将索引写入CSV文件,所以最终输出的文件里看不到Date列。
解决方法
以下两种方式可解决问题,同时建议给每条数据添加股票代码标识,方便后续区分分析:
方式1:循环内处理索引并添加股票标识
修改循环内的代码,将Date索引转为普通列,同时新增Symbol列标记当前股票:
from nsepy import get_history import pandas as pd from datetime import date equity_details = pd.read_csv('C:/Users/am364971/Downloads/EQUITY_SAMPLE.csv') equity_details.rename(columns={"SYMBOL": "Symbol"}, inplace=True) df = [] for name in equity_details.Symbol: try: data = get_history(symbol=name, start=date(2023,1,1), end=date(2023,2,28)) # 将Date索引转为普通列 data.reset_index(inplace=True) # 添加Symbol列标记当前股票 data['Symbol'] = name df.append(data) except Exception as e: print(f'{name} ===> {e}') df = pd.concat(df) # 保存时不写入默认索引 df.to_csv('C:/Data/Combined_StockPrices.csv', index=False)
方式2:合并后统一处理索引
若不需要添加股票标识,可在合并后将索引转为列再保存:
# 前面的循环代码保持不变 df = pd.concat(df) # 将Date索引转为普通列 df.reset_index(inplace=True) # 保存时不写入默认索引 df.to_csv('C:/Data/Combined_StockPrices.csv', index=False)
关键说明
reset_index()会将原索引转为普通列,这里原索引是Date,因此生成的列名就是Date。to_csv时指定index=False,避免把自动生成的默认索引(0、1、2...)写入文件。
内容的提问来源于stack exchange,提问作者Nithish
相关产品推荐
相关产品推荐

