複数の日時列を含むcsvファイルを読んでいます。ファイルの読み取り時にデータ型を設定する必要がありますが、日時が問題のようです。例えば:
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = ['datetime', 'datetime', 'str', 'float']
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
実行するとエラーが発生する場合:
TypeError:データ型「datetime」が理解できません
事実の後、pandas.to_datetime()を介して列を変換することは、どの列が日時オブジェクトになるかを知ることができないオプションではありません。その情報は変化する可能性があり、私のdtypesリストに通知するものからのものです。
あるいは、numpy.genfromtxtでcsvファイルをロードし、その関数でdtypesを設定してから、pandas.dataframeに変換しようとしましたが、データが文字化けします。どんな助けも大歓迎です!
Csvファイルには文字列、整数、および浮動小数点のみを含めることができるため、read_csvに設定するdatetime dtypeはありません。
Dtypeをdatetimeに設定すると、pandasがdatetimeをオブジェクトとして解釈します。つまり、文字列になります。
pandas.read_csv()
関数にはparse_dates
というキーワード引数があります
これを使用すると、デフォルトのdate_parser
(dateutil.parser.parser
)を使用して、文字列、浮動小数点数、または整数を日時にオンザフライで変換できます。
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = {'col1': 'str', 'col2': 'str', 'col3': 'str', 'col4': 'float'}
parse_dates = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes, parse_dates=parse_dates)
これにより、pandasがcol1
およびcol2
を文字列として読み取るようになります。これらは( "2016-05-05"など)であり、文字列を読み取った後、各列のdate_parserがそれに基づいて動作します文字列を返し、その関数が返すものを返します。
pandas.read_csv()
関数alsoにはdate_parser
というキーワード引数があります
これをラムダ関数に設定すると、その特定の関数が日付の解析に使用されます。
関数の実行ではなく、関数を指定する必要があります。したがって、これはCorrectです。
date_parser = pd.datetools.to_datetime
これはincorrectです:
date_parser = pd.datetools.to_datetime()
pd.datetools.to_datetime
はdate_parser = pd.to_datetime
に再配置されました
ありがとう@stackoverYC
文字列の代わりに実際の型を渡してみてください。
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime, datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
しかし、データをいじることなくこれを診断するのは本当に難しいでしょう。
そして、実際には、pandasが日付をTimeStampsに解析することを望むでしょう。
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=True)
Read_csvに渡すことができるparse_datesパラメータがあり、日付として処理する列の名前をリストできます。 OPの最適な方法は次のとおりです。
dateCols = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=dateCols)
現在のread_csvのドキュメント かなりおしゃれ...
Dtypes = [datetime、...]オプションを使用してみましたが、
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime, datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)
次のエラーが発生しました。
TypeError: data type not understood
私がしなければならなかった唯一の変更は、datetimeをdatetime.datetimeに置き換えることです。
import pandas as pd
from datetime import datetime
headers = ['col1', 'col2', 'col3', 'col4']
dtypes = [datetime.datetime, datetime.datetime, str, float]
pd.read_csv(file, sep='\t', header=None, names=headers, dtype=dtypes)