我正在尝试搜索pandas数据帧中是否存在特定日期,但是,我发现一些奇怪的行为,如下所示。我是python和pandas的新手 - 所以任何帮助都会受到赞赏。
示例数据框:
>>> hd.dtypes
Date datetime64[ns]
NAV float64
dtype: object
>>> hd.head()
Date NAV
2004-04-01 41.106
2004-04-02 41.439
2004-04-05 41.727
2004-04-06 41.667
2004-04-07 41.770
基本上我想找个特定日期" next_day"存在于hd['Date']
中,如下所示。代码始终返回not present
,这让我感到困惑。我尝试将next_day
设置为hd
数据框中应该始终满足的第一个日期 - 但它仍显示not present
。
但是,当我使用非日期时间列时,代码可以正常工作:
>>> next_day = hd['Date'][0]
>>> if (next_day not in hd['Date']):
print 'not present'
else:
print 'present'
>>> not present
>>>if (41.106 not in hd['NAV']):
print 'not present'
else:
print 'present'
>>> present
它与日期时间转换有关吗?
答案 0 :(得分:0)
您无法使用该方法进行测试,您可以使用isin
:
hd['Date'].isin([next_day])In [5]:
df['Date'].isin([next_day])
Out[5]:
0 True
1 False
2 False
3 False
4 False
Name: Date, dtype: bool
问题在于您尝试将单个值与数组进行比较,以便获得意外结果:
In [8]:
next_day in df['Date']
Out[8]:
False
In [7]:
next_day not in df['Date']
Out[7]:
True
我也无法重现你的其他断言:
In [17]:
41.106 in df['NAV']
Out[17]:
False
所以使用正确的方法是isin
并传递一个系列或列表,以检查传入列表中的值是否存在于您的系列中,如上所示,无论您看到的结果是伪造的还是不正确的到41.106 not in hd['NAV']
。
您可以使用any
和==
运算符来检查成员资格:
In [18]:
next_day == df['Date']
Out[18]:
0 True
1 False
2 False
3 False
4 False
Name: Date, dtype: bool
In [19]:
(next_day == df['Date']).any()
Out[19]:
True