如何获取DataFrame中匹配指定日期的行整数索引
解决方法
你遇到的报错或空结果,核心原因大概率是日期列类型不统一(比如是字符串而非datetime类型),或是匹配时格式细节不匹配(比如目标日期带时分秒但原数据只有日期部分)。以下是可行的分步解决方案:
1. 统一日期列的类型
先确保拼接后的DataFrame中,日期列是标准datetime类型,避免字符串格式不一致导致匹配失败:
import pandas as pd # 假设拼接后的DataFrame名为merged_df,日期列名为'date' # 这里的format要和你的日期字符串格式对应,比如'%m/%d/%Y'或'%Y/%m/%d' merged_df['date'] = pd.to_datetime(merged_df['date'], format='%Y-%m-%d')
2. 匹配目标日期并获取整数索引
场景1:仅存在一个匹配行
将目标日期也转为datetime类型,生成布尔掩码筛选后提取索引:
# 替换成你的目标日期字符串 target_date_str = '2023-10-01' target_date = pd.to_datetime(target_date_str, format='%Y-%m-%d') # 生成匹配掩码 match_mask = merged_df['date'] == target_date # 获取整数索引 if match_mask.any(): result_index = merged_df[match_mask].index[0] print(result_index) # 输出类似5980的整数 else: print("未找到匹配的日期")
场景2:存在多个匹配行
如果可能有多个行符合条件,可获取所有整数索引的列表:
result_indices = merged_df[match_mask].index.tolist() print(result_indices) # 输出所有匹配的整数索引列表
之前方法失败的原因
pd.query():若日期列是字符串,直接字符串匹配可能因格式细节(如空格、隐式时分秒后缀)不匹配;未转成datetime时,query的日期比较逻辑会失效。dataframe.index[]:如果日期列不是DataFrame的索引(而是普通列),直接操作索引自然找不到对应行。index.get_loc():该方法仅适用于索引本身是日期类型的情况,若你的索引是默认整数序列,调用它必然报错。
内容的提问来源于stack exchange,提问作者Angel Varela
相关产品推荐
相关产品推荐

