>source

다음 날짜 필드가있는 데이터 프레임이 있습니다 :

463    14-05-2019
535    03-05-2019
570    11-05-2019
577    09-05-2019
628    08-08-2019
630    25-05-2019
Name: Date, dtype: object

DDMMAAAA로 형식을 지정해야합니다. 이것이 내가 루프 안에서하고있는 일입니다 ( for idx, row in df.iterrows(): ) :

  • \- 를 제거하고 있습니다  정규식을 사용하는 문자 :

    df.at[idx, 'Date'] = re.sub('\-', '', df.at[idx, 'Date'])

  • 그런 다음 apply 및 apply 0을 사용하여 8 자리 문자열 적용

    df['Date'] = df['Date'].apply(lambda x: '{0:0>8}'.format(x))

하지만 df [ 'Date'] 필드에 df에서 앞에 0이있는 8 자리 숫자가 있지만 csv로 내 보내면 다음과 같이 내 보낸 파일에서 앞에 오는 0이 제거됩니다.

df.to_csv(path_or_buf=report, header=True, index=False, sep=';')

CSV와 같은 필드 :

Dt_DDMMAAAA
30102019
12052019
7052019
26042019
3052019
22042019
25042019
2062019

여기서 어딘가에 요점이 빠져 있다는 것을 알고 있지만 문제가 무엇인지 파악할 수 없습니다 (또는 문제가있는 경우 오히려 잘못 사용 된 방법).


  • 답변 # 1

    IMO 가장 간단한 방법은 date_format 를 사용하는 것입니다  CSV에 쓸 때 인수. 즉, "날짜"열을 datetime 로 변환해야합니다.  미리 pd.to_datetime 를 사용하여 .

    (df.assign(Date=pd.to_datetime(df['Date'], errors='coerce'))
       .to_csv(path_or_buf=report, date_format='%d%m%Y', index=False))
    
    

    이것은 인쇄합니다

    Date
    14052019
    05032019
    05112019
    05092019
    08082019
    25052019
    
    
    to_csv 에 대한 인수에 대한 추가 정보  pandas DataFrame을 CSV 파일로 작성에서 찾을 수 있습니다.

  • 답변 # 2

    내가 할 일은 strftime 를 사용하는 것입니다  + 'to_excel`, csv에서 text로 열면 csv가 표시 할 때 형식을 유지하지 않기 때문에 앞에 0을 표시합니다.이 경우 Excel을 사용할 수 있습니다

    pd.to_datetime(df.Date,dayfirst=True).dt.strftime('%m%d%Y').to_excel('your.xls')
    Out[722]: 
    463    05142019
    535    05032019
    570    05112019
    577    05092019
    628    08082019
    630    05252019
    Name: Date, dtype: object
    
    

  • 답변 # 3

    먼저, 분석법은 예상대로 앞에 0이 포함 된 파일을 생성합니다. 귀하의 설명 에서이 최소 작업 예를 재구성했으며 정상적으로 작동합니다.

    import pandas
    import re
    df = pandas.DataFrame([["14-05-2019"],
                           ["03-05-2019"],
                           ["11-05-2019"],
                           ["09-05-2019"],
                           ["08-08-2019"],
                           ["25-05-2019"]], columns=['Date'])
    for idx in df.index:
        df.at[idx, 'Date'] = re.sub('\-', '', df.at[idx, 'Date'])
    df['Date'] = df['Date'].apply(lambda x: '{0:0>8}'.format(x))
    df.to_csv(path_or_buf="report.csv", header=True, index=False, sep=';')
    
    
    이 시점에서 report.csv  이 내용을 포함합니다 (원하는대로 0으로 시작).

    Date
    14052019
    03052019
    11052019
    09052019
    08082019
    25052019
    
    

    이제 작동하지 않는다고 생각한 이유에 대해 설명합니다. 주로 Pandas 인 경우 read_csv 에서 dtype을 지정하여 출력 유형을 추측하지 못하게 할 수 있습니다. :

    df_readback = pandas.read_csv('report.csv', dtype={'Date': str})
    
           Date
    0  14052019
    1  03052019
    2  11052019
    3  09052019
    4  08082019
    5  25052019
    
    

    또한 Excel에서 이것을 읽고있을 수도 있습니다 ( ; 를 사용하고 있다는 사실에서 추측하고 있습니다)  구분 기호). 불행히도 더블 클릭으로 Excel에서이 필드를 올바르게 읽을 수있는 방법은 없지만 최종 목표 인 경우이 답변에서 Excel이 올바르게 읽을 수 있도록 파일을 엉망으로 만드는 방법을 알 수 있습니다.

  • 이전 Powershell - 파워 쉘 - oracle data provider for net (odpnet)을 사용하여 쿼리를 csv 파일로 내보내는 방법
  • 다음 python - 가변 분해능 Van der Corput 시퀀스