내 데이터 프레임에는 기본적으로 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 스타일링을 위해 준비된 많은 불필요한 속성
id
과class
속성이 포함 된 경우에도 -사용할 수도 있고 사용하지 않을 수도 있음)
스타일링을 사용하십시오 . 스타일링은 데이터 프레임 열의 데이터 / 데이터 유형을 변경하지 않습니다.
이제 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)
