关于python:pandas dataframe中的datetime不会互相减去

Datetime in pandas dataframe will not subtract from each other

我正在尝试以日期时间格式查找pandas数据框中两列之间的时间差异。

下面是我的数据框中的一些数据以及我一直在使用的代码。我已经三重检查了这两列dtypes是否为datetime64。

我的数据:

1
2
3
date_updated                  date_scored
2016-03-30 08:00:00.000       2016-03-30 08:00:57.416  
2016-04-07 23:50:00.000       2016-04-07 23:50:12.036

我的代码:

1
2
3
4
5
data['date_updated'] = pd.to_datetime(data['date_updated'],
format='%Y-%m-%d %H:%M:%S')
data['date_scored'] = pd.to_datetime(data['date_scored'],
format='%Y-%m-%d %H:%M:%S')
data['Diff'] =  data['date_updated'] - data['date_scored']

我收到的错误消息:

1
TypeError: data type"datetime" not understood

任何帮助将不胜感激,谢谢!

我的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i in raw_data[:10]:
scored = i.date_scored
scored_date =  pd.to_datetime(scored, format='%Y-%m-%d %H:%M:%S')
if type(scored_date) =="NoneType":
    pass
elif scored_date.year >= 2016:
    extracted = i.date_extracted
    extracted =  pd.to_datetime(extracted, format='%Y-%m-%d %H:%M:%S')
    bank = i.bank.name
    diff = scored - extracted
    datum = [str(bank), str(extracted), str(scored), str(diff)]
    data.append(datum)
else:
    pass


我使用上述语法遇到了相同的错误(虽然在另一台计算机上工作):

1
data['Diff'] =  data['date_updated'] - data['date_scored']

它在我的新机器上可以通过以下方式工作:

1
data['Diff'] =  data['date_updated'].subtract(data['date_scored'])


您需要更新pandas。
我只是遇到了以前运行时没有问题的旧代码所遇到的同一问题。
将pandas(0.18.1-np111py35_0)更新到较新版本(0.20.2-np113py35_0)后,此问题已解决。


它就像一个护身符。您甚至可以简化代码,因为to_datetime足够聪明,可以为您猜测格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import io
import pandas as pd
# Paste the text by using of triple-quotes to span String literals on multiple lines
zz ="""date_updated,date_scored
2016-03-30 08:00:00.000,       2016-03-30 08:00:57.416  
2016-04-07 23:50:00.000,       2016-04-07 23:50:12.036"""


data = pd.read_table(io.StringIO(zz), delim_whitespace=False, delimiter=',')

data['date_updated'] = pd.to_datetime(data['date_updated'])
data['date_scored'] = pd.to_datetime(data['date_scored'])
data['Diff'] =  data['date_updated'] - data['date_scored']

print(data)
#          date_updated             date_scored                     Diff
# 0 2016-03-30 08:00:00 2016-03-30 08:00:57.416 -1 days +23:59:02.584000
# 1 2016-04-07 23:50:00 2016-04-07 23:50:12.036 -1 days +23:59:47.964000