You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何删除两个DataFrame中按dt列不匹配的行

问题原因

你遇到的报错不是列名不匹配导致的,根本原因有两个:

  • 你直接对两个索引、行数大概率都不一致的Series(discussion['dt']和price['dt'])做逐行等值判断,pandas要求逐行比较的两个Series必须索引完全一致,不符合要求就会抛出你看到的ValueError。
  • 两个DataFrame的dt列格式本身也不一致:第一个price的dt是无时区、精确到天的日期格式,第二个discussion的dt是带时区、精确到秒的时间格式,直接匹配也不会得到正确结果。
解决步骤

步骤1:统一dt列的格式和粒度

首先根据你的匹配需求统一时间粒度,示例分为两种场景:

场景1:按天匹配

import pandas as pd

# 将两个dt都转成datetime格式后取日期粒度,消除时区和时分秒的差异
price['dt'] = pd.to_datetime(price['dt']).dt.date
discussion['dt'] = pd.to_datetime(discussion['dt']).dt.date

场景2:按精确到秒的时间匹配

import pandas as pd

# 统一转成无时区的datetime格式
price['dt'] = pd.to_datetime(price['dt'])
discussion['dt'] = pd.to_datetime(discussion['dt']).dt.tz_localize(None)

步骤2:执行匹配过滤

方案A:保留两个表的所有匹配列

用pandas内连接直接得到两边都匹配的合并结果:

merged_df = pd.merge(discussion, price, on='dt', how='inner')

方案B:单独过滤单个表的匹配行

如果只需要保留某一个表中能匹配上的行,用isin方法实现:

# 过滤得到能和price表匹配的discussion行
filtered_discussion = discussion[discussion['dt'].isin(price['dt'].unique())]
# 过滤得到能和discussion表匹配的price行
filtered_price = price[price['dt'].isin(discussion['dt'].unique())]

内容的提问来源于stack exchange,提问作者YanRemes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 00:24:03