我想计算提到的日期和发布日期之间的差异。所以我有下一个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,限制是时间戳(&#39; 1677-09-21 00:12:43.145225&#39;),不应该是我的情况。
我有两个问题:
更新:我发现了pd.Timedelta https://pandas.pydata.org/pandas-docs/stable/timedeltas.html#timedelta-limitations的限制 第一个问题依然存在。如何克服这个限制?谢谢!
答案 0 :(得分: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年: 。它是矢量化操作的合理原因