gpt4 book ai didi

python - Pandas Timedelta 在应该为正的地方却是负的,如何克服限制

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:38 27 4
gpt4 key购买 nike

我想计算提及某事的日期和发布该消息的日期之间的差异。所以我有下一个数据框

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 行的响应是错误的。差异在任何地方都应该是正数。

如果我只做逐个值的差异,那么 react 是肯定的。请参阅下面的代码。

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 ,限制是 Timestamp('1677-09-21 00:12:43.145225') ,这不应该是我的情况。

我有 2 个问题:

  1. 如何克服“错误”行为?
  2. 这应该被视为 pandas pd.Timedelta 中的错误吗?或者是这是一些“正常”行为吗?

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

最佳答案

由于存在时间戳的限制,因此通过迭代进行减法,即

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

应该被视为错误吗?不,自从 pandas 社区特别提到以来,

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

关于python - Pandas Timedelta 在应该为正的地方却是负的,如何克服限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47907967/

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