>source

2 개의 다른 형식으로 날짜 시간이있는 팬더 데이터 프레임이 있습니다 (예 :

).

3/14/2019 5:15:32 AM
2019-08-03 05:15:35
2019-01-03 05:15:33
2019-01-03 05:15:33
2/28/2019 5:15:31 AM
2/27/2019 11:18:39 AM

...

다양한 형식을 시도했지만 오류가 발생했습니다

2019-02-28로 형식을 가져오고 시간을 없애고 싶습니다

like ValueError: unconverted data remains: AM
  • 답변 # 1

    pd.to_datetime().dt.strftime() 를 사용할 수 있습니다  전체 열을 datetime 객체로 효율적으로 변환 한 다음 Pandas가 날짜 형식을 지능적으로 추측하여 문자열로 효율적으로 변환합니다.

    df = pd.Series('''3/14/2019 5:15:32 AM
    2019-08-03 05:15:35
    2019-01-03 05:15:33
    2019-01-03 05:15:33
    2/28/2019 5:15:31 AM
    2/27/2019 11:18:39 AM'''.split('\n'), name='date', dtype=str).to_frame()
    print(pd.to_datetime(df.date).dt.strftime('%Y-%m-%d'))
    
    

    0    2019-03-14
    1    2019-08-03
    2    2019-01-03
    3    2019-01-03
    4    2019-02-28
    5    2019-02-27
    Name: date, dtype: object
    
    

    원하는 것을 제공하지 않으면 다른 종류의 형식을 식별하고 날짜/시간 객체로 변환 할 때 다른 설정을 적용해야합니다.

    # Classify date column by format type
    df['format'] = 1
    df.loc[df.date.str.contains('/'), 'format'] = 2
    df['new_date'] = pd.to_datetime(df.date)
    # Convert to datetime with two different format settings
    df.loc[df.format == 1, 'new_date'] = pd.to_datetime(df.loc[df.format == 1, 'date'], format = '%Y-%d-%m %H:%M:%S').dt.strftime('%Y-%m-%d')
    df.loc[df.format == 2, 'new_date'] = pd.to_datetime(df.loc[df.format == 2, 'date'], format = '%m/%d/%Y %H:%M:%S %p').dt.strftime('%Y-%m-%d')
    print(df)
    
    

                       date  format    new_date
    0   3/14/2019 5:15:32 AM       2  2019-03-14
    1    2019-08-03 05:15:35       1  2019-03-08
    2    2019-01-03 05:15:33       1  2019-03-01
    3    2019-01-03 05:15:33       1  2019-03-01
    4   2/28/2019 5:15:31 AM       2  2019-02-28
    5  2/27/2019 11:18:39 AM       2  2019-02-27
    
    

  • 답변 # 2

    DataFrame의 열 이름이 DatStr 라고 가정하십시오. .

    성공의 열쇠는 적절한 전환 기능입니다. 각 날짜 문자열에 적용 :

    def datCnv(src):
        return pd.to_datetime(src)
    
    

    실제 날짜 열을 만들기 위해해야 ​​할 일은 다음과 같습니다.

    df['Dat'] = df.DatStr.apply(datCnv)
    
    

    DataFrame을 인쇄하면 결과는 다음과 같습니다.

                     DatStr                 Dat
    0   3/14/2019 5:15:32 AM 2019-03-14 05:15:32
    1    2019-08-03 05:15:35 2019-08-03 05:15:35
    2    2019-01-03 05:15:33 2019-01-03 05:15:33
    3    2019-01-03 05:15:33 2019-01-03 05:15:33
    4   2/28/2019 5:15:31 AM 2019-02-28 05:15:31
    5  2/27/2019 11:18:39 AM 2019-02-27 11:18:39
    
    

    to_datetime 참고  기능은 인식하기에 충분히 영리합니다 각 경우에 사용되는 실제 날짜 형식입니다.

관련 자료

  • 이전 java - 인덱스의 모듈러스에 따라 ArrayList에 정수 추가
  • 다음 swift - alamofire를 사용하여 iOS에서 액세스 토큰을 전달하는 방법