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
上記の構文を使用して同じエラーが発生しました(ただし、別のマシンで動作しました)。
data['Diff'] = data['date_updated'] - data['date_scored']
それは私の新しいマシンで動作しました:
data['Diff'] = data['date_updated'].subtract(data['date_scored'])
パンダを更新する必要があります。以前は問題なく実行されていた古いコードで同じ問題に遭遇しました。 pandas(0.18.1-np111py35_0)を新しいバージョン(0.20.2-np113py35_0)に更新した後、問題は解決しました。
それは魅力のように働きます。 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