Pandas的时间差是负的,哪里应该是正的,如何克服限制

2024-05-21 00:58:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我所说的计算和我所提到的计算日之间的差异。所以我有下一个数据帧

df_test= pd.DataFrame([{'Mention Date': pd.Timestamp('2015-09-17 12:47:06'),
                        'Publication Date': pd.Timestamp('1684-01-01 00:00:00')},
                        {'Mention Date': pd.Timestamp('2015-09-17 12:47:06'),
                        'Publication Date': pd.Timestamp('2013-01-01 00:00:00')},
                        {'Mention Date': pd.Timestamp('2015-09-17 12:47:06'),
                        'Publication Date': pd.Timestamp('1724-01-01 00:00:00')},
                        {'Mention Date': pd.Timestamp('2015-01-01'),
                        'Publication Date': pd.Timestamp('1722-09-22 00:12:43.1453')},
                        {'Mention Date': pd.Timestamp('2015-01-01'),
                        'Publication Date': pd.Timestamp('1722-09-22 00:00:00')}])

现在我要计算“提及日期”和“出版日期”之间的差异。在

^{pr2}$

如您所见,第0行和第4行的响应是错误的。差别应该是正的。在

如果我只差一个值,那么响应是正的。请参阅下面的代码。在

print df_test.loc[0]["Mention Date"] - df_test.loc[0]["Publication Date"] 
print df_test.loc[3]["Mention Date"] - df_test.loc[3]["Publication Date"] 
print type(df_test.loc[0]["Mention Date"] - df_test.loc[0]["Publication Date"]) 

121154 days, 12:47:06
106751 days 23:47:16.854700
<type 'datetime.timedelta'>

但结果是不同类型的。在

但是,根据https://pandas.pydata.org/pandas-docs/stable/timeseries.html#timestamp-limitations,限制是时间戳('1677-09-21 00:12:43.145225'),这不应该是我的情况。在

我有两个问题:

  1. 如何克服“错误”行为?在
  2. 这应该算是熊猫身上的虫子吗警察。时间差?或者是 这很正常吗?在

更新:我发现了pd时间增量https://pandas.pydata.org/pandas-docs/stable/timedeltas.html#timedelta-limitations 第一个问题仍然存在。如何克服这种局限性?谢谢您!在


Tags: testpandasdfdatetype错误差异days
1条回答
网友
1楼 · 发布于 2024-05-21 00:58:06

由于有时间戳的限制,所以用迭代法进行减法,即

df_test.apply(lambda x  : x['Mention Date'] - x['Publication Date'],1)

0          121154 days, 12:47:06
1              989 days 12:47:06
2           106545 days 12:47:06
3    106751 days 23:47:16.854700
4           106752 days, 0:00:00

应该被认为是一个bug?没有,因为熊猫社区特别提到

由于pandas以纳秒分辨率表示时间戳,因此可以使用64位整数表示的时间跨度限制为大约584年:。这是矢量化操作的合法理由

相关问题 更多 >