gpt4 book ai didi

python - 如何使用 NaT 值正确处理整个 DataFrame 中的日期时间比较?

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:40 25 4
gpt4 key购买 nike

我在尝试检查 DataFrame 是否存在时偶然发现了这种奇怪的行为具有高于特定日期的值,而该 DataFrame 也可能包含 pd.NaT

值的比较符合预期:

import pandas as pd

pd.NaT > pd.to_datetime('2018-10-15')
# False

Series 的比较也按预期表现:

s = pd.Series([pd.NaT, pd.to_datetime('2018-10-16')])
s > pd.to_datetime('2018-10-15')

#0 False
#1 True
#dtype: bool

但是 DataFrame比较不正确:

s.to_frame() > pd.to_datetime('2018-10-15')
# 0
#0 True
#1 True

在我看来问题是比较最初返回 NaN这是(在某些时候?)被强制为 True鉴于以下行为:

df = pd.DataFrame([[pd.NaT, pd.to_datetime('2018-10-16')],
[pd.to_datetime('2018-10-16'), pd.NaT]])

df >= pd.to_datetime('2018-10-15')
# 0 1
#0 True True
#1 True True

df.ge(pd.to_datetime('2018-10-15'))
# 0 1
#0 NaN 1.0
#1 1.0 NaN

那么我们真的可以不用> < >= <=吗?比较 DataFrame 时的运算符并且需要依赖.lt .gt .le .ge其次是 .fillna(0)

df.ge(pd.to_datetime('2018-10-15')).fillna(0)
# 0 1
#0 0.0 1.0
#1 1.0 0.0

最佳答案

这是一个将在下一版 pandas (0.24.0) 中修复的错误:

In [1]: import pandas as pd; pd.__version__
Out[1]: '0.24.0.dev0+1504.g9642fea9c'

In [2]: s = pd.Series([pd.NaT, pd.to_datetime('2018-10-16')])

In [3]: s > pd.to_datetime('2018-10-15')
Out[3]:
0 False
1 True
dtype: bool

In [4]: s.to_frame() > pd.to_datetime('2018-10-15')
Out[4]:
0
0 False
1 True

In [5]: df = pd.DataFrame([[pd.NaT, pd.to_datetime('2018-10-16')],
...: [pd.to_datetime('2018-10-16'), pd.NaT]])
...:

In [6]: df >= pd.to_datetime('2018-10-15')
Out[6]:
0 1
0 False True
1 True False

In [7]: df.ge(pd.to_datetime('2018-10-15'))
Out[7]:
0 1
0 False True
1 True False

对应的 GitHub issue 见:https://github.com/pandas-dev/pandas/issues/22242

关于python - 如何使用 NaT 值正确处理整个 DataFrame 中的日期时间比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54046100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com