복붙노트

[PYTHON] Python pandas를 사용하여 날짜 및 시간 열 결합

PYTHON

Python pandas를 사용하여 날짜 및 시간 열 결합

다음 열과 팬더 데이터 프레임이 있습니다.

Date              Time
01-06-2013      23:00:00
02-06-2013      01:00:00
02-06-2013      21:00:00
02-06-2013      22:00:00
02-06-2013      23:00:00
03-06-2013      01:00:00
03-06-2013      21:00:00
03-06-2013      22:00:00
03-06-2013      23:00:00
04-06-2013      01:00:00

다음 데이터를 얻기 위해 [날짜]와 데이터 [ '시간'] 데이터를 어떻게 결합합니까? pd.to_datetime을 사용하여 수행하는 방법이 있습니까?

Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00

해결법

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

    1.예를 들어 직접 읽으 셨을 수도 있습니다. parse_dates = [[ 'Date', 'Time']]을 사용하여 read_csv를 사용하는 경우.

    예를 들어 직접 읽으 셨을 수도 있습니다. parse_dates = [[ 'Date', 'Time']]을 사용하여 read_csv를 사용하는 경우.

    이들은 단지 문자열이라고 가정하면 to_datetime을 적용 할 수 있도록 공백을 사용하여 간단히 추가 할 수 있습니다.

    In [11]: df['Date'] + ' ' + df['Time']
    Out[11]:
    0    01-06-2013 23:00:00
    1    02-06-2013 01:00:00
    2    02-06-2013 21:00:00
    3    02-06-2013 22:00:00
    4    02-06-2013 23:00:00
    5    03-06-2013 01:00:00
    6    03-06-2013 21:00:00
    7    03-06-2013 22:00:00
    8    03-06-2013 23:00:00
    9    04-06-2013 01:00:00
    dtype: object
    
    In [12]: pd.to_datetime(df['Date'] + ' ' + df['Time'])
    Out[12]:
    0   2013-01-06 23:00:00
    1   2013-02-06 01:00:00
    2   2013-02-06 21:00:00
    3   2013-02-06 22:00:00
    4   2013-02-06 23:00:00
    5   2013-03-06 01:00:00
    6   2013-03-06 21:00:00
    7   2013-03-06 22:00:00
    8   2013-03-06 23:00:00
    9   2013-04-06 01:00:00
    dtype: datetime64[ns]
    

    참고 : 놀랍게도 (나를 위해) NaN이 NaT로 변환되면서 제대로 작동하지만 전환 인수를 사용하는 것이 걱정됩니다.

  2. ==============================

    2.허용되는 응답은 데이터 유형 문자열 인 열에 적용됩니다. 완전성을 위해 : 열의 데이터 유형이 날짜와 시간 일 때이를 수행하는 방법을 검색 할 때이 질문을 접하게됩니다.

    허용되는 응답은 데이터 유형 문자열 인 열에 적용됩니다. 완전성을 위해 : 열의 데이터 유형이 날짜와 시간 일 때이를 수행하는 방법을 검색 할 때이 질문을 접하게됩니다.

    df.apply(lambda r : pd.datetime.combine(r['date_column_name'],r['time_column_name']),1)
    
  3. ==============================

    3.나는 jka.ne에 대한 논평을하기에 충분한 명성이 없다.

    나는 jka.ne에 대한 논평을하기에 충분한 명성이 없다.

    나는 그것이 작동하도록 jka.ne의 라인을 수정해야만했다 :

    df.apply(lambda r : pd.datetime.combine(r['date_column_name'],r['time_column_name']).time(),1)
    

    이것은 다른 사람들을 도울 수 있습니다.

    또한, 나는 combine 대신 replace를 사용하여 다른 접근법을 테스트했다.

    def combine_date_time(df, datecol, timecol):
        return df.apply(lambda row: row[datecol].replace(
                                    hour=row[timecol].hour,
                                    minute=row[timecol].minute),
                        axis=1)
    

    이는 OP의 경우 다음과 같습니다.

    combine_date_time(df, 'Date', 'Time')
    

    비교적 큰 데이터 세트 (> 500.000 행)에 대해 두 방법 모두 시간을 잰 적이 있고 둘 다 비슷한 런타임을 사용하지만 결합을 사용하는 것이 더 빠릅니다 (조합의 경우 대체는 59 초).

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

    4.이 기능을 사용하여 날짜와 시간을 동일한 데이터 프레임 열에 병합 할 수 있습니다.

    이 기능을 사용하여 날짜와 시간을 동일한 데이터 프레임 열에 병합 할 수 있습니다.

    import pandas as pd    
    data_file = 'data.csv' #path of your file
    

    병합 된 열이있는 .csv 파일 읽기 Date_Time :

    data = pd.read_csv(data_file, parse_dates=[['Date', 'Time']]) 
    

    이 행을 사용하여 다른 두 열도 유지할 수 있습니다.

    data.set_index(['Date', 'Time'], drop=False)
    
  5. ==============================

    5.유형이 다른 경우 (datetime 및 timestamp 또는 str) 열을 형 변환하고 to_datetime을 사용할 수 있습니다.

    유형이 다른 경우 (datetime 및 timestamp 또는 str) 열을 형 변환하고 to_datetime을 사용할 수 있습니다.

    df.loc[:,'Date'] = pd.to_datetime(df.Date.astype(str)+' '+df.Time.astype(str))
    

    결과 :

    0   2013-01-06 23:00:00
    1   2013-02-06 01:00:00
    2   2013-02-06 21:00:00
    3   2013-02-06 22:00:00
    4   2013-02-06 23:00:00
    5   2013-03-06 01:00:00
    6   2013-03-06 21:00:00
    7   2013-03-06 22:00:00
    8   2013-03-06 23:00:00
    9   2013-04-06 01:00:00
    

    베스트,

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

    6.대답은 실제로 열 유형이 무엇인지에 달려 있습니다. 제 경우에는 날짜와 시간이있었습니다.

    대답은 실제로 열 유형이 무엇인지에 달려 있습니다. 제 경우에는 날짜와 시간이있었습니다.

    > df[['Date','Time']].dtypes
    Date     datetime64[ns]
    Time    timedelta64[ns]
    

    이것이 사실이라면 다음과 같이 열을 추가하면됩니다.

    > df['Date'] + df['Time']
    
  7. ==============================

    7.결합 기능을 사용하십시오.

    결합 기능을 사용하십시오.

    datetime.datetime.combine(date, time)
    
  8. ==============================

    8.datetime 및 timedelta 객체를 결합하여 문자열 연결없이 datetime으로 변환 할 수도 있습니다. pd.DataFrame.pop과 함께 소스 시리즈를 동시에 제거 할 수 있습니다.

    datetime 및 timedelta 객체를 결합하여 문자열 연결없이 datetime으로 변환 할 수도 있습니다. pd.DataFrame.pop과 함께 소스 시리즈를 동시에 제거 할 수 있습니다.

    df['DateTime'] = pd.to_datetime(df.pop('Date')) + pd.to_timedelta(df.pop('Time'))
    
    print(df)
    
                 DateTime
    0 2013-01-06 23:00:00
    1 2013-02-06 01:00:00
    2 2013-02-06 21:00:00
    3 2013-02-06 22:00:00
    4 2013-02-06 23:00:00
    5 2013-03-06 01:00:00
    6 2013-03-06 21:00:00
    7 2013-03-06 22:00:00
    8 2013-03-06 23:00:00
    9 2013-04-06 01:00:00
    
    print(df.dtypes)
    
    DateTime    datetime64[ns]
    dtype: object
    
  9. ==============================

    9.먼저 적절한 데이터 유형을 갖추 었는지 확인하십시오.

    먼저 적절한 데이터 유형을 갖추 었는지 확인하십시오.

    df["Date"] = pd.to_datetime(df["Date"])
    df["Time"] = pd.to_timedelta(df["Time"])
    

    그런 다음 쉽게 결합 할 수 있습니다.

    df["DateTime"] = df["Date"] + df["Time"]
    
  10. from https://stackoverflow.com/questions/17978092/combine-date-and-time-columns-using-python-pandas by cc-by-sa and MIT license