Python 数据帧中的日期时间不会相互相减

Python 数据帧中的日期时间不会相互相减,python,pandas,datetime,subtraction,Python,Pandas,Datetime,Subtraction,我试图找出数据帧中两列的时间差,这两列都是datetime格式 下面是我的数据框中的一些数据和我一直在使用的代码。我已三次检查这两列数据类型是否为datetime64 我的数据: 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 我的代码:

我试图找出数据帧中两列的时间差,这两列都是datetime格式

下面是我的数据框中的一些数据和我一直在使用的代码。我已三次检查这两列数据类型是否为datetime64

我的数据:

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['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']
我收到的错误消息:

TypeError: data type "datetime" not understood
任何帮助都将不胜感激,谢谢

我的变通解决方案:

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

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

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
你需要更新熊猫。 我刚刚遇到了同样的问题,使用了一个以前运行时没有问题的旧代码。
将pandas(0.18.1-np111py35_0)更新为新版本(0.20.2-np113py35_0)后,问题得到解决。

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

它在我的新机器上工作:

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

你用的是什么版本的熊猫?另外,您确定要减去个别日期吗?您的代码表明您正在删除DateTimeIndex对象,在这种情况下,
data['date\u updated']。差异(data['date\u scored'])
对我来说可以更好地工作。。。另外,我认为您不需要
format
参数。pandas将计算出该格式。我删除了format参数,并将字符串很好地转换为datetime格式,但是我仍然得到TypeError:data type“datetime”在运行包含实际减法的最后一行代码时无法理解…在使用代码时:data['date\u updated'].差异(data['date\u scored'])我得到以下错误:AttributeError:“Series”对象没有属性“difference”,谢谢您回复我。对我来说,我必须卸载numpy,然后使用.whl文件再次安装它。如果其他人将来看到这一点,它可能会帮助他们。数据从csv文件读入熊猫df…如何将io功能添加到现有df?谢谢您好,
import io
只是通过
io.StringIO(zz)
读取CSV文件来读取示例数据。所以不要把它考虑进去。我的建议是按原样尝试下面的例子。如果它起作用,就意味着问题出在你的数据上。我的错误与我的数据相同…类型错误:数据类型“datetime”不了解这些是我的三个“导入”:>>>将datetime导入为dt>>>将pandas导入为pd>>>将numpy导入为NP您不需要导入
datetime
。然而,这并不能解释错误。我认为问题可能来自您的python安装,因为我提供的示例将与pandas一起使用。例如,尝试从新安装的Anaconda发行版开始。对不起,我不知道如何帮助你。酷,我刚才解决了这个问题-但我喜欢这个解决方案!
data['Diff'] =  data['date_updated'].subtract(data['date_scored'])