将数据框与包含日期时间的系列比较的大熊猫

问题描述:

我试图比较数据框与系列,以检查df中的某行是否等于系列,例如,将数据框与包含日期时间的系列比较的大熊猫

import pandas as pd 
import datetime as dt 

d = pd.DataFrame([[1, dt.datetime(1990,12,10)], 
        [2, dt.datetime(1990,12,11)]]) 
s = d.loc[0].copy() 

print(d == s) # or d.gt(s) which should do the same 

这打破,出现以下错误

TypeError: int() argument must be a string, a bytes-like object or a number, not 'Timestamp'

比较values产生预期的结果:

d.values == s.values 
array([[ True, True], 
     [False, False]], dtype=bool) 

也没有提出这个错误使用字符串:

d = pd.DataFrame([[1, "a"], [2, "b"]]) 

s = d.loc[1].copy() 

print(s == d) 
#  0  1 
#0 True True 
#1 False False 

这是熊猫中的错误还是我做错了什么?

编辑:

我使用python 3.6与大熊猫0.20.3

我开了大熊猫github上的问题: 17411

问题是,我的版本0.20.3是通过PIP或畅达的最新版本。

Version 0.21,这是github上的最后一个dev版本似乎已经解决了这个问题。

我会尽快的版本是0.21 PyPI上

放弃信仰在评论中提到

, (可能值得添加的问题)这适用于字符串,所以我不明白为什么它不应该为datetimes

关于github here的讨论表明,它是一个持续的辩论,关于日期时间是否应该与数字相比是错误的。


如果打印ds你会得到如下:

d:

0   1 
0 1 1990-12-10 
1 2 1990-12-11 

S:

0      1 
1 1990-12-10 00:00:00 
Name: 0, dtype: object 
以s

,数字0,1的左边有指数(这是s == d比较的关键),所以你的公司德正在比较11然后21990-12-10 00:00:00 - 这就是为什么你得到你的错误。


,为什么这个工程与价值观 - .values还给没有索引numpy的阵列,因此比较的形状做你期待的,而不是考虑的指标。

+0

如果你说的是真的,下面还应该打破删除的问题:'当d = pd.DataFrame([1,“一”], [2,“b”]]) s = d.loc [0] .copy()','d == s',但它不是 – gionni

+0

@gionni真的很有趣 - 我要去多看看它。 – Stael

+0

我真的很感激,谢谢。我试图在调试中运行该示例以了解它是如何工作的,它非常复杂 – gionni

我认为问题在于你正在比较两个不支持比较的对象。

我想尝试这样的事:

d[d[1] == dt.datetime(1990,12,10)]

+0

我不知道哪些列中有日期,哪些列没有加上检查所有列,我将不得不将它放入循环中 – gionni