[python] Pandas에서 datetime 형식을 변경하는 방법

내 데이터 프레임에는 기본적으로 pandas dtype ‘object’로 변환되는 DOB열 (예제 형식 1/1/2016)이 있습니다.DOB object

와 날짜 형식이 변환 df['DOB'] = pd.to_datetime(df['DOB']), 날짜로 변환됩니다 : 2016-01-26과는 dtype다음과 같습니다 DOB datetime64[ns].

이제이 날짜 형식을 01/26/2016다른 일반 날짜 형식 으로 변환하고 싶습니다 . 어떻게하나요?

내가 시도하는 방법이 무엇이든 항상 날짜를 2016-01-26형식으로 표시 합니다.



답변

다른 형식 dt.strftime으로 변환해야하는 경우 사용할 수 있습니다 datetime(그러나 dtype열의 경우 object( string)가 됨).

import pandas as pd

df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '26/1/2016'}})
print (df)
         DOB
0  26/1/2016 
1  26/1/2016

df['DOB'] = pd.to_datetime(df.DOB)
print (df)
         DOB
0 2016-01-26
1 2016-01-26

df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print (df)
         DOB        DOB1
0 2016-01-26  01/26/2016
1 2016-01-26  01/26/2016


답변

형식을 변경하지만 유형은 변경하지 않음 :

df['date'] = pd.to_datetime(df["date"].dt.strftime('%Y-%m'))


답변

아래 코드는 이전 코드 대신 저에게 효과적이었습니다.

df['DOB']=pd.to_datetime(df['DOB'].astype(str), format='%m/%d/%Y')


답변

첫 번째 답변과 비교하여 dt.strftime ()을 먼저 사용하고 pd.to_datetime ()을 사용하는 것이 좋습니다. 이런 식으로 여전히 datetime 데이터 유형이됩니다.

예를 들면

import pandas as pd

df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '})
print(df.dtypes)

df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print(df.dtypes)

df['DOB1'] = pd.to_datetime(df['DOB1'])
print(df.dtypes)


답변

차이가 있습니다

  • 데이터 프레임 셀 의 내용 (이진 값) 및
  • 발표는 , 우리를 위해 인간을 (를 표시).

따라서 질문은 데이터 / 데이터 유형 자체를 변경하지 않고 내 데이터 의 적절한 표현 에 도달하는 방법입니다.

답은 다음과 같습니다.

  • 데이터 프레임을 표시하기 위해 Jupyter 노트북 을 사용하는 경우 또는
  • HTML 파일 형식으로 프레젠테이션에 도달하려는 경우 ( 추가 CSS 스타일링을 위해 준비된 많은 불필요한 속성 idclass속성이 포함 된 경우에도 -사용할 수도 있고 사용하지 않을 수도 있음)

스타일링을 사용하십시오 . 스타일링은 데이터 프레임 열의 데이터 / 데이터 유형을 변경하지 않습니다.

이제 Jupyter 노트북에서이 파일에 접근하는 방법을 보여 드리겠습니다. HTML 파일 형식의 프레젠테이션은 질문 끝 부분에있는 메모를 참조하세요.

나는 당신의 칼럼에 DOB 이미 타입datetime64 이 있다고 가정 할 것입니다 (당신은 그것에 도달하는 방법을 알고 있음을 보여주었습니다). 몇 가지 기본 스타일을 보여주기 위해 간단한 데이터 프레임 (단 하나의 열만 포함)을 준비했습니다.

  • 스타일 없음 :

       df
          DOB
0  2019-07-03
1  2019-08-03
2  2019-09-03
3  2019-10-03
  • 스타일 지정 mm/dd/yyyy:

       df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
          DOB
0  07/03/2019
1  08/03/2019
2  09/03/2019
3  10/03/2019
  • 스타일 지정 dd-mm-yyyy:

       df.style.format({"DOB": lambda t: t.strftime("%d-%m-%Y")}) 
          DOB
0  03-07-2019
1  03-08-2019
2  03-09-2019
3  03-10-2019

조심해!
복귀 객체는 dataframe 아닙니다 – 그것은 클래스의 목적은 Styler그래서, 다시 할당하지 않습니다 df:

하지 마십시오 :

df = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})    # Don´t do this!

(모든 데이터 프레임에는 .style속성으로 액세스 할 수있는 Styler 개체가 있으며 df.style데이터 프레임 자체가 아닌 이 개체를 변경했습니다 .)


질문과 답변:

  • Q : Jupyter 노트북 셀에서 마지막 명령 으로 사용 된 Styler 객체 (또는이를 반환하는 표현식) 가 Styler 객체 자체가 아니라 (스타일이 지정된) 테이블을 표시 하는 이유 는 무엇입니까?

  • A : 모든 Styler 개체에는 ._repr_html_()데이터 프레임을 렌더링하기위한 HTML 코드를 반환하는 콜백 메서드가 있기 때문입니다 (멋진 HTML 테이블).

    Jupyter Notebook IDE는이 메서드를 자동으로 호출하여 이를 가진 개체를 렌더링합니다.


노트 :

스타일링을 위해 Jupyter 노트북이 필요하지 않습니다 (즉 , 데이터 / 데이터 유형을 변경하지 않고 데이터 프레임을 멋지게 출력하기 위해 ).

Styler 객체에는 render()HTML 코드가있는 문자열을 얻으려는 경우 (예 : 형식이 지정된 데이터 프레임을 웹에 게시하거나 단순히 HTML 형식으로 표를 표시하는 경우) 메서드 가 있습니다.

df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
HTML_string = df_styler.render()


답변

아래 코드는 ‘datetime’유형으로 변경되고 주어진 형식 문자열의 형식도 지정합니다. 잘 작동합니다!

df['DOB']=pd.to_datetime(df['DOB'].dt.strftime('%m/%d/%Y'))


답변

이것을 시도하면 날짜 형식이 DD-MM-YYYY로 변환됩니다.

df['DOB'] = pd.to_datetime(df['DOB'], dayfirst = True)