首页 > 解决方案 > 使用一个数据帧的索引访问另一个数据帧的行时出错

问题描述

我有两个不同的数据框,df1 和 df2。df1 由从初始日期到最终日期的完整日期系列索引;df2 从必须在 df1 中的日期索引,但它的索引是 df1 索引的子集。我正在尝试遍历 df1.index 并使用以下代码验证 df1 的特定索引值是否存在于 df2 中:

from datetime import timedelta
import datetime
import pandas as pd


for idx in df1.index:
    if idx in df2.index:
        print(df2.loc[idx])

我面临的问题是 df2 的某些索引是产生 if 语句,而有些则不是。例如:

sdate = datetime.date(2020, 5, 4)
edate = datetime.date(2020, 10, 1)
some_date = edate - timedelta(days=2)
# df1 with all the dates
df1 = pd.DataFrame(index=pd.date_range(sdate,edate-timedelta(days=1),freq='d'))
# df2 with only two dates (sdate and some_date)
df2 = pd.DataFrame(index=[sdate, some_date])

当我尝试运行以下代码时,它会产生False

df1.loc[some_date].name in df2.index
>>> False

尽管some_date显然在 df2.index

some_date in df2.index
>>> True

在与 df2.index 的比较中,首先出现的返回df1.loc[some_date].name不兼容,但是当尝试运行以下代码时,会观察到不同的行为:

df1.loc[sdate].name in df2.index
>>> True
sdate in df2.index
>>> True

这真的如何运作?

标签: pythonpandasdataframeindexing

解决方案


错误是因为数据类型不同。
df1.indexdatetimedf2.indexdate
试试这样:

df1.index.normalize()
for idx in df2.index:
    if idx in df2.index:
        print(df2.loc[idx])

或者,用日期时间替换日期:

sdate = datetime.datetime(2020, 5, 4)
edate = datetime.datetime(2020, 10, 1)

推荐阅读