programing

팬더와 엑셀 스타일 데이트 변환

cafebook 2023. 4. 13. 21:09
반응형

팬더와 엑셀 스타일 데이트 변환

Excel 형식의 데이터 타임을 제공하는 xml 파일을 구문 분석해야 합니다. 예를 들어 다음과 같습니다.42580.3333333333.

판다는 그 숫자를 일반으로 바꿀 수 있는 방법을 제공하나요?datetime오브젝트?

좋아, 가장 쉬운 건 이 빌딩을 건설하는 것이다.TimedeltaIndex플로트에서 이 값을 스칼라 날짜/시간에 추가합니다.1900,1,1:

In [85]:
import datetime as dt
import pandas as pd
df = pd.DataFrame({'date':[42580.3333333333, 10023]})
df

Out[85]:
           date
0  42580.333333
1  10023.000000

In [86]:
df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + dt.datetime(1900,1,1)
df

Out[86]:
           date                  real_date
0  42580.333333 2016-07-31 07:59:59.971200
1  10023.000000 1927-06-12 00:00:00.000000

네, 엑셀은 날짜가 좀 이상한 것 같아요. @ayhan:

In [89]:
df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + dt.datetime(1899, 12, 30)
df

Out[89]:
           date                  real_date
0  42580.333333 2016-07-29 07:59:59.971200
1  10023.000000 1927-06-10 00:00:00.000000

관련 항목:python datetime.datetime을 Excel 일련 번호로 변환하는 방법

직접 해석할 수 있습니다.pd.to_datetime키워드 포함unit='D'그리고.origin='1899-12-30':

import pandas as pd

df = pd.DataFrame({'xldate': [42580.3333333333]})

df['date'] = pd.to_datetime(df['xldate'], unit='D', origin='1899-12-30')

df['date']
Out[2]: 
0   2016-07-29 07:59:59.999971200
Name: date, dtype: datetime64[ns]

추가 판독치:

서드파티 라이브러리는 다음 주소로 전달하기 전에 사용할 수 있습니다.

import xlrd

def read_date(date):
    return xlrd.xldate.xldate_as_datetime(date, 0)

df = pd.DataFrame({'date':[42580.3333333333, 10023]})

df['new'] = pd.to_datetime(df['date'].apply(read_date), errors='coerce')

print(df)

           date                 new
0  42580.333333 2016-07-29 08:00:00
1  10023.000000 1927-06-10 00:00:00

pd의 "Apply lambda"로 해결할 수 있는 또 다른 옵션입니다.시리즈:

xl_date = 42580

df['DATE SERIES'] = df['DATE SERIES'].apply(lambda x: datetime.fromordinal(datetime(1900, 1, 1).toordinal() + xldate - 2))

언급URL : https://stackoverflow.com/questions/38454403/convert-excel-style-date-with-pandas

반응형