检查日期是否属于数据帧熊猫

时间:2018-02-01 00:59:03

标签: python pandas numpy datetime python-datetime

我有一个日期数据框:

>>> d.head()
Out[55]: 
0   2010-06-01
1   2010-06-02
2   2010-06-03
3   2010-06-04
4   2010-06-07
dtype: datetime64[ns]

我无法检查其中是否包含给定日期:

>>> d.iloc[1]
Out[59]: Timestamp('2010-06-02 00:00:00')

>>> d.iloc[1] in d
Out[60]: False

>>> np.datetime64(d.iloc[1]) in d
Out[61]: False

>>> d.iloc[1] in pd.to_datetime(d)
Out[62]: False

>>> pd.to_datetime(d.iloc[1]) in pd.to_datetime(d)
Out[63]: False

最好检查一下这个?

回答以下一些评论:

使用值无法解决问题:

>>> d.iloc[1] in d.values
Out[69]: False

我不认为这是iloc返回行而不是值的问题

>>> x= pd.Timestamp('2010-6-2')
>>> x
Out[72]: Timestamp('2010-06-02 00:00:00')
>>> x in d
Out[73]: False
>>> x in pd.to_datetime(d)
Out[74]: False
>>> x in d.values
Out[75]: False

3 个答案:

答案 0 :(得分:2)

试试这个。您正在将pd.Series的第一个值与列中的值进行比较,当然这将是True

我认为你的比较不起作用的原因是in operator acting on pd.Series checks for existence in the series index,而不是系列值本身。应用set可确保系列值用于比较。

# df
#     date
# 0   2010-06-01
# 1   2010-06-02
# 2   2010-06-03
# 3   2010-06-04
# 4   2010-06-07

# convert date column to datetime
df.date = pd.to_datetime(df.date)

df.date[1] in set(df.date)

答案 1 :(得分:0)

这是我在试错时得到的一个可能的答案,不确定我是否遗漏了什么。

检查d表明它是dtype datetime64 [ns]

>>> d.head()
Out[55]: 
0   2010-06-01
1   2010-06-02
2   2010-06-03
3   2010-06-04
4   2010-06-07
dtype: datetime64[ns]

在d.values上也是如此

>>> d.values
Out[76]: 
array(['2010-05-31T20:00:00.000000000-0400', '2010-06-01T20:00:00.000000000-0400',.....], dtype='datetime64[ns]')

但只检查其中一个会将其更改为时间戳。

>>> d.iloc[1]
Out[82]: Timestamp('2010-06-02 00:00:00')

所以我这样做了:

>>> x= pd.Timestamp('2010-6-2')
>>> x
Out[72]: Timestamp('2010-06-02 00:00:00')
>>> np.datetime64(x) in d.values
Out[77]: True

检查@jp_data_analysis使用set的建议也有效,因为它保持格式为Timestamp

>>> set(d.iloc[:])
Out[81]: 
{Timestamp('2015-10-13 00:00:00'),
 Timestamp('2011-07-18 00:00:00'),......

>>> x in set(d.iloc[:])
Out[83]: True

答案 2 :(得分:0)

您可以使用.isin进行以下操作(请注意,.isin确实需要列表作为输入):

df.date = pd.to_datetime(df.date)

df.date.isin([df.date.iloc[1]])