파이썬 판다스에서 엑셀 파일 불러온 후 다시 저장할때 년월일이 저장이 않되는 부분 해결 방법 알려 주시면 고맙겠습니다.

조회수 1347회

코드는 아래와 같습니다.

import pandas as pd
import win32com.client
import openpyxl

excel_app = win32com.client.Dispatch('Excel.Application')

file_path = r'c:/p_py/totodate.xlsx'

workbook = excel_app.Workbooks.Open(file_path)

sheet = workbook.Sheets(1)

df = pd.DataFrame(sheet.UsedRange())

df1 = df.copy()

new_header = df1.iloc[0]
df = df1[1:]

df1.columns = new_header
print(df1['today'].dtype)

df1.to_excel('c:/p_py/totodate1.xlsx')

상기 코드에엑셀 파일에는
2022-01-07 일자 유형으로 되어 있으며

다시 엑셀 저장 시
일자 가 공백으로 나옵니다.

  • 판다스는 잘 모르지만 df = df1[1:] 한 다음부터는 df가 두번다시 사용되지 않는데 이 슬라이싱은 왜 하시는 건가요? 엽토군 2023.7.11 12:53

1 답변

  • 이 문제는 대개 Excel에서 날짜를 읽을 때 날짜가 숫자로 파싱되기 때문에 발생합니다(Excel에서는 날짜가 부동 소수점으로 표현되며, 1970-01-01은 1이고, 매일 이 숫자가 1씩 증가합니다). 다시 Excel 파일에 쓸 때, 당신은 단지 숫자를 쓴 것이지 날짜가 아니므로, Excel에서는 공백으로 표시됩니다.

    이 문제를 해결하려면, 날짜 열을 datetime 유형으로 변환한 다음 Excel 파일에 저장할 수 있습니다.

    df1['today'] = pd.to_datetime(df1['today'])
    df1.to_excel('c:/p_py/totodate1.xlsx')
    

    또한 코드에서 pd.DataFrame(sheet.UsedRange()) 부분은 제대로 작동하지 않을 수 있습니다. pd.DataFrame()는 리스트 또는 딕셔너리와 같은 반복 가능한 객체를 매개변수로 필요로 하는데, sheet.UsedRange()는 Range 객체를 반환합니다. 대신에 pandas의 read_excel 함수를 사용할 수 있습니다. 예를 들면, df = pd.read_excel(file_path).

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)