[python] 팬더를 사용할 때 날짜 부분 만 유지하십시오.

pandas.to_datetime데이터의 날짜를 구문 분석하는 데 사용 합니다. 팬더는 기본적으로 datetime64[ns]날짜가 모두 매일이지만 날짜를 나타냅니다 . 나는에 날짜를 변환하는 우아한 / 영리한 방법이 있는지 궁금 datetime.date또는 datetime64[D]내가 CSV에 데이터를 쓸 때, 날짜가가 추가되지 않도록 00:00:00. 요소별로 유형을 수동으로 변환 할 수 있다는 것을 알고 있습니다.

[dt.to_datetime().date() for dt in df.dates]

그러나 이것은 많은 행이 있고 사용 목적을 무효화하기 때문에 실제로 느립니다 pandas.to_datetime. dtype전체 열을 한 번 에 변환하는 방법이 있습니까? 또는 pandas.to_datetime매일 데이터로 작업하는 동안 시간 부분을 제거 할 수 있도록 정밀 사양을 지원합니까?



답변

버전 이후 0.15.0이제 .dt날짜 구성 요소에만 액세스 하는 데 쉽게 사용할 수 있습니다.

df['just_date'] = df['dates'].dt.date

위의 반환 datetime.date당신이 갖고 싶어 DTYPE은, datetime64다음을 그냥 수 normalize자정까지의 시간 구성 요소는 모든 값을 설정 있도록 00:00:00:

df['normalised_date'] = df['dates'].dt.normalize()

이것은 dtype을 그대로 유지 datetime64하지만 디스플레이에는 date값만 표시됩니다 .


답변

간단한 해결책 :

df['date_only'] = df['date_time_column'].dt.date


답변

OP가 제기 한 질문에 대한 가장 직접적인 답변 인 EdChum의 대답을 상향 조정했지만 실제로 성능 문제를 해결하지는 못합니다 (여전히 파이썬 datetime객체에 의존 하므로 벡터에서 작동하지 않습니다-즉, 느려질 것입니다).

더 나은 성능의 대안 은을 사용하는 것 df['dates'].dt.floor('d')입니다. 엄밀히 말하면 시간을로 설정하기 때문에 “날짜 부분 만 유지”하지 않습니다 00:00:00. 그러나 다음과 같은 경우 OP가 원하는대로 작동합니다.

  • 화면에 인쇄
  • CSV로 저장
  • 열을 사용하여 groupby

… 작업이 벡터화되기 때문에 훨씬 효율적입니다.

편집 : 사실, 영업 이익의 선호했을 대답은 아마도 “의 최신 버전은 pandas수 없습니다 이 경우 CSV로 시간을 쓰는 00:00:00모든 관측치에 대한”.


답변

팬더 DatetimeIndex와 원하는 Series방법 normalize을 정확하게 수행 하는 메소드 가 있습니다.

이 답변 에서 그것에 대해 자세히 읽을 수 있습니다 .

로 사용할 수 있습니다 ser.dt.normalize()


답변

팬더 v0.13 이상 : 사용 to_csvdate_format 매개 변수 와 함께

가능하면 datetime64[ns]시리즈를 objectdtype 시리즈 datetime.date개체 로 변환하지 마십시오 . 후자는 종종 다음을 사용하여 구성됩니다.pd.Series.dt.date 는 포인터 배열로 저장되며 순수한 NumPy 기반 시리즈에 비해 비효율적입니다.

CSV에 쓸 때는 형식이 중요하므로 의 date_format매개 변수 만 사용하십시오 to_csv. 예를 들면 다음과 같습니다.

df.to_csv(filename, date_format='%Y-%m-%d')

형식 지정 규칙 은 Python strftime지시문 을 참조하십시오 .


답변

이것은 날짜를 추출하는 간단한 방법입니다.

import pandas as pd

d='2015-01-08 22:44:09'
date=pd.to_datetime(d).date()
print(date)


답변

로 변환 중 datetime64[D]:

df.dates.values.astype('M8[D]')

DataFrame col에 다시 할당해도 [ns]로 되돌아갑니다.

당신이 실제를 원한다면 datetime.date:

dt = pd.DatetimeIndex(df.dates)
dates = np.array([datetime.date(*date_tuple) for date_tuple in zip(dt.year, dt.month, dt.day)])