检查熊猫系列是否包含给定值时,“ in”运算符无法正常工作

时间:2019-03-28 04:50:33

标签: python pandas datetime

我有以下包含时间戳的系列zar:

In [743]: zar
Out[743]: 
0   2019-01-01
1   2019-03-21
2   2019-04-19
3   2019-04-22
4   2019-04-27
5   2019-05-01
6   2019-06-17
7   2019-08-09
8   2019-09-24
9   2019-12-16
Name: zar, dtype: datetime64[ns]

In [744]: zar[5]
Out[744]: Timestamp('2019-05-01 00:00:00')

In [745]: j
Out[745]: Timestamp('2019-05-01 00:00:00')

In [746]: j in zar.values
Out[746]: False

由于两个都包含时间戳,结果为何为False? 我想在匹配一系列时间戳时返回True。

1 个答案:

答案 0 :(得分:1)

j in zarjzar index 的每个元素进行比较。

例如

0 in zar
# True

0 in zar.index
# True

这也与DataFrames的行为一致,默认情况下in对列进行成员资格测试。

df = pd.DataFrame(columns=['a', 'b', 'c'])
'a' in df
# True

'd' in df
# False

您将需要Series.eq==运算符)或Series.isin,以及Series.any

(zar == j).any()

详细信息
zar == j返回一系列布尔值:

(zar == j)

0    False
1    False
2    False
3    False
4    False
5     True
6    False
7    False
8    False
9    False
Name: zar, dtype: bool

然后调用any,如果任何行为True,则返回True。如果要使用True值的索引,请使用np.flatnonzero

np.flatnonzero(zar == j)
# array([5])