web-dev-qa-db-ja.com

pandasデータフレーム内の日時は互いに減算されません

pandas両方とも日時形式のデータフレームの2つの列間の時間の違いを見つけようとしています。

以下は、データフレーム内のデータの一部と、私が使用しているコードです。これらの2つの列のdtypeが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
9
Graham Streich

上記の構文を使用して同じエラーが発生しました(ただし、別のマシンで動作しました)。

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

それは私の新しいマシンで動作しました:

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

パンダを更新する必要があります。以前は問題なく実行されていた古いコードで同じ問題に遭遇しました。 pandas(0.18.1-np111py35_0)を新しいバージョン(0.20.2-np113py35_0)に更新した後、問題は解決しました。

2
Roberto Valerio

それは魅力のように働きます。 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
1
Romain