복붙노트

[PYTHON] 타임 스탬프 열을 별도의 날짜 및 시간 열로 나누기

PYTHON

타임 스탬프 열을 별도의 날짜 및 시간 열로 나누기

나는 1000 개가 넘는 타임 스탬프 (아래)가있는 팬더 데이터 프레임을 가지고 있습니다.

2016-02-22 14:59:44.561776

이 타임 스탬프를 '날짜'와 '시간'의 두 열로 나누는 데 어려움을 겪고 있습니다. 날짜 형식은 그대로 유지할 수 있지만 시간은 CST (밀리 초 포함)로 변환해야합니다.

도와 주셔서 감사합니다

해결법

  1. ==============================

    1.왜 처음부터 이걸하고 싶을지 모르겠지만, 꼭해야한다면 ...

    왜 처음부터 이걸하고 싶을지 모르겠지만, 꼭해야한다면 ...

    df = pd.DataFrame({'my_timestamp': pd.date_range('2016-1-1 15:00', periods=5)})
    
    >>> df
             my_timestamp
    0 2016-01-01 15:00:00
    1 2016-01-02 15:00:00
    2 2016-01-03 15:00:00
    3 2016-01-04 15:00:00
    4 2016-01-05 15:00:00
    
    df['new_date'] = [d.date() for d in df['my_timestamp']]
    df['new_time'] = [d.time() for d in df['my_timestamp']]
    
    >>> df
             my_timestamp    new_date  new_time
    0 2016-01-01 15:00:00  2016-01-01  15:00:00
    1 2016-01-02 15:00:00  2016-01-02  15:00:00
    2 2016-01-03 15:00:00  2016-01-03  15:00:00
    3 2016-01-04 15:00:00  2016-01-04  15:00:00
    4 2016-01-05 15:00:00  2016-01-05  15:00:00
    

    중부 표준시로의 변환은 더 까다 롭습니다. 현재 타임 스탬프가 '인식되지 않음'이라고 가정합니다. 즉, 시간대가 연결되어 있지 않습니까? 그렇지 않다면, 당신은 그들을 어떻게 개종시킬 것으로 기대합니까?

    자세한 사항은:

    https://docs.python.org/2/library/datetime.html

    Python에서 알 수없는 datetime 시간대를 인식시키는 방법

    편집하다

    두 번 대신 타임 스탬프에서 한 번만 반복하는 다른 방법 :

    new_dates, new_times = zip(*[(d.date(), d.time()) for d in df['my_timestamp']])
    df = df.assign(new_date=new_dates, new_time=new_times)
    
  2. ==============================

    2.가장 쉬운 방법은 pandas Series의 dt 속성을 사용하는 것입니다. 귀하의 경우 dt.date 및 dt.time을 사용해야합니다.

    가장 쉬운 방법은 pandas Series의 dt 속성을 사용하는 것입니다. 귀하의 경우 dt.date 및 dt.time을 사용해야합니다.

    df = pd.DataFrame({'full_date': pd.date_range('2016-1-1 10:00:00.123', periods=10, freq='5H')})
    df['date'] = df['full_date'].dt.date
    df['time'] = df['full_date'].dt.time
    
    In [166]: df
    Out[166]:
                    full_date        date             time
    0 2016-01-01 10:00:00.123  2016-01-01  10:00:00.123000
    1 2016-01-01 15:00:00.123  2016-01-01  15:00:00.123000
    2 2016-01-01 20:00:00.123  2016-01-01  20:00:00.123000
    3 2016-01-02 01:00:00.123  2016-01-02  01:00:00.123000
    4 2016-01-02 06:00:00.123  2016-01-02  06:00:00.123000
    5 2016-01-02 11:00:00.123  2016-01-02  11:00:00.123000
    6 2016-01-02 16:00:00.123  2016-01-02  16:00:00.123000
    7 2016-01-02 21:00:00.123  2016-01-02  21:00:00.123000
    8 2016-01-03 02:00:00.123  2016-01-03  02:00:00.123000
    9 2016-01-03 07:00:00.123  2016-01-03  07:00:00.123000
    
  3. ==============================

    3.같은 문제가 있었는데 이것이 나를 위해 일했습니다.

    같은 문제가 있었는데 이것이 나를 위해 일했습니다.

    데이터 집합의 날짜 열을 "날짜"라고 가정합니다.

    import pandas as pd
    df = pd.read_csv(file_path)
    
    df['Dates'] = pd.to_datetime(df['date']).dt.date
    df['Time'] = pd.to_datetime(df['date']).dt.time
    

    그러면 날짜와 날짜가 서로 다른 두 개의 '날짜'와 '시간'이 표시됩니다.

  4. ==============================

    4.타임 스탬프가 이미 팬더 형식 (문자열 아님) 인 경우 :

    타임 스탬프가 이미 팬더 형식 (문자열 아님) 인 경우 :

    df["date"] = df["timestamp"].date
    dt["time"] = dt["timestamp"].time
    

    타임 스탬프가 문자열이면 datetime 모듈을 사용하여 구문 분석 할 수 있습니다.

    from datetime import datetime
    data1["timestamp"] = df["timestamp"].apply(lambda x: \
        datetime.strptime(x,"%Y-%m-%d %H:%M:%S.%f"))
    

    출처: http://pandas.pydata.org/pandas-docs/stable/timeseries.html

  5. ==============================

    5.타임 스탬프가 문자열이면 datetime 객체로 변환 할 수 있습니다.

    타임 스탬프가 문자열이면 datetime 객체로 변환 할 수 있습니다.

    from datetime import datetime
    
    timestamp = '2016-02-22 14:59:44.561776'
    dt = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S.%f')
    

    그때부터 원하는 형식으로 가져올 수 있습니다.

  6. ==============================

    6.시험

    시험

    s = '2016-02-22 14:59:44.561776'
    
    date,time = s.split()
    

    필요에 따라 시간을 변환하십시오.

    시간을 더 나누려면,

    hour, minute, second = time.split(':')
    
  7. ==============================

    7.이 시도:

    이 시도:

    def time_date(datetime_obj):
        date_time = datetime_obj.split(' ')
        time = date_time[1].split('.')
        return date_time[0], time[0]
    
  8. from https://stackoverflow.com/questions/35595710/splitting-timestamp-column-into-seperate-date-and-time-columns by cc-by-sa and MIT license