求助:合并两个Pandas DataFrame后丢失Ticker与Date列的解决方法
解决Pandas合并DataFrame时丢失Ticker和Date列的问题
我来帮你搞定这个问题!咱们先搞清楚为什么会丢失这两列:你在加载股价数据的时候,设置了index=[TICKER, DATE],这就把Ticker和Date变成了索引列,而不是DataFrame的普通列。pd.merge()默认只会合并普通列,不会自动包含索引列,所以这两列就没出现在合并结果里。
下面给你几个简单可行的解决方案:
方案1:重置股价表的索引再合并
最直接的方法就是把df_prices的索引重置为普通列,这样合并时就能带上Ticker和Date了:
# 把索引列(Ticker和Date)转成普通列 df_prices_reset = df_prices.reset_index() # 执行合并操作 merged_df = pd.merge(df_companies, df_prices_reset, on='SimFinId')
这样合并后的DataFrame就会完整保留Ticker、Date以及所有其他列。
方案2:加载股价数据时不设置索引
如果你一开始就不需要将Ticker和Date设为索引,可以在加载数据时去掉index参数:
# 加载股价数据时不指定索引,Ticker和Date会作为普通列存在 df_prices = sf.load_shareprices(variant='daily', market='us') # 直接合并即可 merged_df = pd.merge(df_companies, df_prices, on='SimFinId')
这种方式更简洁,适合不需要把Ticker+Date作为复合索引的场景。
验证合并结果
完成合并后,你可以用下面的代码检查是否包含目标列:
# 查看所有列名 print(merged_df.columns) # 或者查看前几行数据确认 print(merged_df.head())
正常情况下,你会看到Ticker和Date都出现在列列表里,完全不影响后续和第三个表按日期筛选合并的操作。
内容的提问来源于stack exchange,提问作者Mustafa
相关产品推荐
相关产品推荐

