Pandas DataFrame合并时日期自动转为日期时间格式问题
问题:合并股票收盘价时索引格式不匹配导致全NaN的原因
问题背景
我需要合并2013-02-08至2018-02-07五年间500只股票的收盘价,目标是构建以日期为索引、每列对应一只股票的DataFrame。但使用Pandas的join函数时,索引的日期格式自动转为datetime格式,导致合并后的DataFrame所有条目均为NaN。
相关代码与操作过程
1. 导入并初始化数据
import pandas as pd df= pd.read_csv('all_stocks_5yr.csv') df.head()
通过df['Name'].unique().shape确认数据包含505个股票名称,用pd.date_range(df['date'].min(), df['date'].max())生成目标日期范围dates,并初始化空DataFrame:
close_prices = pd.DataFrame(index=dates) # 将索引设置为日期
2. 单只股票处理测试
提取前3只股票的收盘价生成临时DataFrame,结果符合预期:索引为日期格式,仅包含对应股票的收盘价。
symbols = df['Name'].unique() # 将股票名称存储为数组 i = 1 for symbol in symbols: df_sym = df[df['Name']==symbol] df_tmp = pd.DataFrame(data=df_sym['close'].to_numpy() , index = df_sym['date'], columns=[symbol]) print(df_tmp) # 打印临时DataFrame i += 1 if i >3: break
示例输出:
AAL date 2013-02-08 14.75 2013-02-11 14.46 2013-02-12 14.27 2013-02-13 14.66 2013-02-14 13.99 ... ... 2018-02-01 53.88 2018-02-02 52.10 2018-02-05 49.76 2018-02-06 51.18 2018-02-07 51.40 [1259 rows x 1 columns]
3. 合并时出现异常
使用join合并前3只股票的临时DataFrame时,结果所有条目均为NaN,且索引自动转为datetime格式:
i = 1 for symbol in symbols: df_sym = df[df['Name']==symbol] df_tmp = pd.DataFrame(data=df_sym['close'].to_numpy() , index = df_sym['date'], columns=[symbol]) close_prices = close_prices.join(df_tmp) i += 1 if i >3: break close_prices.head()
疑问
为什么合并过程中日期索引会自动转为datetime格式,进而导致索引无法匹配、合并结果全为NaN?
内容的提问来源于stack exchange,提问作者Jane172
相关产品推荐
相关产品推荐

