我有一个日期的数据:
>>> 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
发布于 2018-02-01 01:06:37
尝尝这个。您正在将pd.Series
的第一个值与列中的值进行比较,当然,该值将是True
。
我认为您的比较不起作用的原因是因为 checks for existence in the ,而不是系列本身。应用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)
发布于 2018-02-01 01:32:56
这里有一个可能的答案,我在尝试和错误,不确定我是不是错过了什么。
检查d显示它是一个dtype datetime64ns。
>>> 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
检查使用set的@jp_data_analysis建议也是有效的,因为它使格式保持时间戳。
>>> 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
发布于 2019-03-03 13:20:37
您可以使用.isin
执行以下操作(请注意,.isin确实需要一个列表作为输入):
df.date = pd.to_datetime(df.date)
df.date.isin([df.date.iloc[1]])
https://stackoverflow.com/questions/48553824
复制相似问题