Pandas Timedelta是负面的,应该是积极的,如何克服局限

问题描述 投票:1回答:1

我想计算提到的smth和发布日之间的差异。所以我有下一个DataFrame

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')}])

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

print df_test["Mention Date"] - df_test["Publication Date"]

0    -92350 days +13:12:32.290448
1               989 days 12:47:06
2            106545 days 12:47:06
3     106751 days 23:47:16.854700
4   -106752 days +00:25:26.290448
dtype: timedelta64[ns]

正如您所看到的,第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. 这应该被认为是pandas pd.Timedelta中的一个错误吗?或者这是一些“正常”行为?

更新:我发现pd.Timedelta https://pandas.pydata.org/pandas-docs/stable/timedeltas.html#timedelta-limitations的限制第一个问题仍然存在。如何克服这个限制?谢谢!

python python-2.7 pandas datetime timedelta
1个回答
0
投票

由于存在时间戳的限制,因此减去迭代,即

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年:它是矢量化操作的合理原因

© www.soinside.com 2019 - 2024. All rights reserved.