在Pandas数据框中搜索日期

时间:2015-04-05 19:54:26

标签: python pandas time-series

我正在尝试搜索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

它与日期时间转换有关吗?

1 个答案:

答案 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