Programming

pandas read_csv의 datetime dtypes

procodes 2020. 8. 22. 12:27
반응형

pandas read_csv의 datetime dtypes


여러 datetime 열이있는 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 ()을 통해 열을 변환하는 것은 옵션이 아닙니다. 어떤 열이 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)을 사용하여 문자열, 부동 소수점 또는 정수를 datetimes로 즉시 변환 할 수 있습니다.

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)

이 팬더 읽고 발생할 수 col1col2그들이 가능성이 가장 높은 문자열로 ( "2016년 5월 5일"등) 및 문자열을 읽은 후, 각 열의 date_parser는 해당 문자열에 따라 행동하고 무엇이든 그 함수가 반환을 다시 줄 것이다 .

고유 한 날짜 구문 분석 기능 정의 :

pandas.read_csv()함수 에는 다음과 같은 키워드 인수 있습니다.date_parser

이것을 람다 함수로 설정하면 해당 특정 함수가 날짜 구문 분석에 사용됩니다.

GOTCHA 경고

당신은 그것을 함수, 함수의없는 실행을주고있다, 따라서이는 올바른

date_parser = pd.datetools.to_datetime

이것은 올바르지 않습니다 .

date_parser = pd.datetools.to_datetime()

Pandas 0.22 업데이트

pd.datetools.to_datetime 이전되었습니다 date_parser = pd.to_datetime

감사합니다 @stackoverYC


이제 read_csv에 전달할 수있는 parse_dates 매개 변수가있어 날짜로 처리하려는 열의 이름을 나열 할 수 있습니다. 이제 OP의 가장 좋은 방법은 다음과 같습니다.

dateCols = ['col1', 'col2']
pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=dateCols)

현재 read_csv 문서는멋지다 ...


문자열 대신 실제 유형을 전달해 볼 수 있습니다.

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)

하지만 여러분의 데이터 없이는 이것을 진단하기가 정말 어려울 것입니다.

실제로 팬더가 날짜를 TimeStamps로 구문 분석하기를 원할 것입니다.

pd.read_csv(file, sep='\t', header=None, names=headers, parse_dates=True)

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)

참고 URL : https://stackoverflow.com/questions/21269399/datetime-dtypes-in-pandas-read-csv

반응형