Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查日期是否落在数据框中_Python_Pandas_Numpy_Datetime_Python Datetime - Fatal编程技术网

Python 检查日期是否落在数据框中

Python 检查日期是否落在数据框中,python,pandas,numpy,datetime,python-datetime,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.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

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

我认为您的比较不起作用的原因是因为,不是序列值本身。应用
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)

这里有一个可能的答案,我在反复试验中得到的,不确定我是否遗漏了什么

检查d显示它是一个数据类型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值上

>>> 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_使用set的分析建议也起作用,因为它将格式保持为时间戳

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

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


它是d.values中的
d.iloc[1],当您在d中执行
smt时,它搜索d的索引。也有关系。@ayhan那没用。编辑above@Garbage收集器该帖子中的解决方案没有帮助,因为我已重新打开shownOK…@jp_data_analysis抱歉,似乎没有帮助-我将结果包含在编辑中above@dayum您是否尝试将pd.to_datetime
应用于您正在检查的值?这是@GarbaceCollector提供的链接中建议的。@jp_data_analysis上面报告的是@jp_data_analysis是的,有效。我刚刚发布了一个详细的答案,解释了为什么这似乎有效,以及另一个解决方案
df.date = pd.to_datetime(df.date)

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