Python查找两个DataFrame日期列共同日期对应行索引及报错解决
错误原因
- 你当前代码的逻辑是对两个长度不同的日期列做逐元素对等比较,pandas要求逐元素比较的两个序列长度必须完全一致,你的ff有8132行、pp只有3457行,长度不匹配就会触发这个报错。
- 这种逐行比较的逻辑本身也不符合需求:你要找的是两个表都存在的日期,不是位置相同且日期相等的行,就算两个表长度一致,这么写也拿不到跨位置的共同日期。
实现方案
方案1:直接拼接得到目标数据集(推荐)
直接用pandas内置的merge方法取共同日期拼接,不需要自己手动找行号:
import pandas as pd # 原有数据读取逻辑保留 ff = pd.read_excel('Europe_5_Factors_Daily.xlsx', sheet_name='Factors') pp = pd.read_excel('Europe_5_Factors_Daily.xlsx', sheet_name='Sheet1') ff = ff.iloc[:, 0:4] # 统一日期格式,避免字符串/时间类型不匹配导致匹配失败 ff['Date'] = pd.to_datetime(ff['Date']) pp['Date'] = pd.to_datetime(pp['Date']) # 按Date列取交集拼接,how='inner'就是取两个表都存在的日期 merged_df = pd.merge(ff, pp, on='Date', how='inner')
得到的merged_df就包含共同日期、ff对应列、pp对应列的完整数据。
方案2:单独获取共同日期对应行号
如果确实需要单独提取两个表中共同日期对应的行号,可以用如下逻辑:
# 先统一日期格式 ff['Date'] = pd.to_datetime(ff['Date']) pp['Date'] = pd.to_datetime(pp['Date']) # 取两个表的共同日期集合 common_dates = set(ff['Date']) & set(pp['Date']) # 分别提取两个表对应行号 ff_common_index = ff[ff['Date'].isin(common_dates)].index.tolist() pp_common_index = pp[pp['Date'].isin(common_dates)].index.tolist()
内容的提问来源于stack exchange,提问作者johnlemon9
相关产品推荐
相关产品推荐

