将数据框与包含日期时间的系列比较的大熊猫
我试图比较数据框与系列,以检查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
放弃信仰在评论中提到
, (可能值得添加的问题)这适用于字符串,所以我不明白为什么它不应该为datetimes
关于github here的讨论表明,它是一个持续的辩论,关于日期时间是否应该与数字相比是错误的。
如果打印d
和s
你会得到如下:
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
比较的关键),所以你的公司德正在比较1
到1
然后2
对1990-12-10 00:00:00
- 这就是为什么你得到你的错误。
,为什么这个工程与价值观 - .values
还给没有索引numpy的阵列,因此比较的形状做你期待的,而不是考虑的指标。
我认为问题在于你正在比较两个不支持比较的对象。
我想尝试这样的事:
d[d[1] == dt.datetime(1990,12,10)]
我不知道哪些列中有日期,哪些列没有加上检查所有列,我将不得不将它放入循环中 – gionni
如果你说的是真的,下面还应该打破删除的问题:'当d = pd.DataFrame([1,“一”], [2,“b”]]) s = d.loc [0] .copy()','d == s',但它不是 – gionni
@gionni真的很有趣 - 我要去多看看它。 – Stael
我真的很感激,谢谢。我试图在调试中运行该示例以了解它是如何工作的,它非常复杂 – gionni