d = {'Dates':[pd.Timestamp('2013-01-02'),
pd.Timestamp('2013-01-03'),
pd.Timestamp('2013-01-04')],
'Num1':[1,2,3],
'Num2':[-1,-2,-3]}
df = DataFrame(data=d)
Dates Num1 Num2
0 2013-01-02 00:00:00 1 -1
1 2013-01-03 00:00:00 2 -2
2 2013-01-04 00:00:00 3 -3
Dates datetime64[ns]
Num1 int64
Num2 int64
dtype: object
df['Dates'].isin([pd.Timestamp('2013-01-04')])
0 False
1 False
2 False
Name: Dates, dtype: bool
我期待“2013-01-04”的日期为真,我错过了什么?我使用最新的0.12版Pandas
答案 0 :(得分:2)
我有相同版本的熊猫,@ DSM的答案很有帮助。另一种解决方法是使用apply方法:
>>> df.Dates.apply(lambda date: date in [pd.Timestamp('2013-01-04')])
0 False
1 False
2 True
Name: Dates, dtype: bool
答案 1 :(得分:1)
lib.ismember
的这一部分:
for i in range(n):
val = util.get_value_at(arr, i)
if val in values:
result[i] = 1
else:
result[i] = 0
val
是numpy.datetime64
个对象,values
是set
个Timestamp
个对象。测试成员资格应该有效,但不是:
>>> import pandas as pd, numpy as np
>>> ts = pd.Timestamp('2013-01-04')
>>> ts
Timestamp('2013-01-04 00:00:00', tz=None)
>>> dt64 = np.datetime64(ts)
>>> dt64
numpy.datetime64('2013-01-03T19:00:00.000000-0500')
>>> dt64 == ts
True
>>> dt64 in [ts]
True
>>> dt64 in {ts}
False
我认为通常这种行为 - 在列表中工作,而不是在一组中工作 - 是由于__hash__
出现了问题:
>>> hash(dt64)
1357257600000000
>>> hash(ts)
-7276108168457487299
如果哈希值不相同,则无法在集合中进行成员资格测试。我可以想办法解决这个问题,但选择最好的方法取决于他们在实现我没有资格评论的时间戳时所做的设计选择。
答案 2 :(得分:1)
这对我有用。
df['Dates'].isin(np.array([pd.Timestamp('2013-01-04')]).astype('datetime64[ns]'))
我知道它有点冗长。但是,万一你需要让它工作,这将有所帮助。有关详细信息,请参阅https://github.com/pydata/pandas/issues/5021。
答案 3 :(得分:0)
你尝试过之后加00:00:00吗? 如果你添加了一篇文章并添加了一些标签,这样会更好,这样人们就可以获得更多你的问题以及你正在使用的语法。
答案 4 :(得分:0)
我发现在我的情况下使用字符串效果更好:
df['Dates'].isin(['2013-01-04'])
0 False
1 False
2 True
Name: Dates, dtype: bool
df_qry = df['Dates'][df['Num1']>=2]
1 2013-01-03
2 2013-01-04
Name: Dates, dtype: datetime64[ns]
df_mask = df['Dates'].isin(df_qry.astype(str))
0 False
1 True
2 True
Name: Dates, dtype: bool
df[df_mask]
Dates Num1 Num2
1 2013-01-03 2 -2
2 2013-01-04 3 -3
只是一个旁注:这对于在情节时间序列上设置 rangebreaks
非常方便,例如:
fig.update_yaxes(rangebreaks=[dict(values=df.index[df_mask].astype(str))])