Pandas 时间差计算误差
我的数据框中有两个时间列:date1和date2。 我一直认为,两者都是日期和时间格式。然而,我现在必须计算两者之间的天数差,这不起作用 我运行以下代码来分析数据:Pandas 时间差计算误差,pandas,datetime,Pandas,Datetime,我的数据框中有两个时间列:date1和date2。 我一直认为,两者都是日期和时间格式。然而,我现在必须计算两者之间的天数差,这不起作用 我运行以下代码来分析数据: df['month1'] = pd.DatetimeIndex(df['date1']).month df['month2'] = pd.DatetimeIndex(df['date2']).month print(df[["date1", "date2", "month1", "month2"]].head(10)) print(
df['month1'] = pd.DatetimeIndex(df['date1']).month
df['month2'] = pd.DatetimeIndex(df['date2']).month
print(df[["date1", "date2", "month1", "month2"]].head(10))
print(df["date1"].dtype)
print(df["date2"].dtype)
输出为:
date1 date2 month1 month2
0 2016-02-29 2017-01-01 1 1
1 2016-11-08 2017-01-01 1 1
2 2017-11-27 2009-06-01 1 6
3 2015-03-09 2014-07-01 1 7
4 2015-06-02 2014-07-01 1 7
5 2015-09-18 2017-01-01 1 1
6 2017-09-06 2017-07-01 1 7
7 2017-04-15 2009-06-01 1 6
8 2017-08-14 2014-07-01 1 7
9 2017-12-06 2014-07-01 1 7
datetime64[ns]
object
如您所见,date1的月份计算不正确!
最后一个不起作用的操作是:
df["date_diff"] = (df["date1"]-df["date2"]).astype('timedelta64[D]')
这将导致以下错误:
incompatible type [object] for a datetime/timedelta operation
我第一次想到可能是因为date2,所以我试着:
df["date2_new"] = pd.to_datetime(df['date2'] - 315619200, unit = 's')
导致:
unsupported operand type(s) for -: 'str' and 'int'
有人知道我需要改变什么吗 使用带有days属性的.dt访问器:
df[['date1','date2']] = df[['date1','date2']].apply(pd.to_datetime)
df['date_diff'] = (df['date1'] - df['date2']).dt.days
输出:
date1 date2 month1 month2 date_diff
0 2016-02-29 2017-01-01 1 1 -307
1 2016-11-08 2017-01-01 1 1 -54
2 2017-11-27 2009-06-01 1 6 3101
3 2015-03-09 2014-07-01 1 7 251
4 2015-06-02 2014-07-01 1 7 336
5 2015-09-18 2017-01-01 1 1 -471
6 2017-09-06 2017-07-01 1 7 67
7 2017-04-15 2009-06-01 1 6 2875
8 2017-08-14 2014-07-01 1 7 1140
9 2017-12-06 2014-07-01 1 7 1254
当你阅读时,date1和date2是否都是date\u time?或者您是否使用unit='m'将它们转换为date\u time?date2仍然是一列字符串日期。在做任何事情之前,您应该首先将它们转换为datetime对象,然后在正确完成之后,您可以使用df.col_name.dt.month获得月份。我不明白为什么您要从date2中减去一个数字,如果是第一个表的格式,则使用秒。这个答案对我来说很好,但是我可以问一下为什么month1仍然没有正确显示吗?我想我们应该重新定义df['month1']=pd.to_datetimedf['date1'].dt.month,类似于df['month2']。您使用的是pd.DatetimeIndex,这有点非传统。然而,测试它看起来你的逻辑应该是可行的。不知道你为什么要回到错误的月份。