2013-07-31 2 views
40

다음 열이있는 팬더 데이터 프레임이 있습니다.python 팬더를 사용하여 날짜와 시간 열을 결합하십시오.

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 
+0

열의 유형은 무엇입니까? – mattexx

답변

74

그것은 당신이 직접 예를 들어,이를 읽을 수 있었다 수 있음을 언급 할 가치가 read_csv을 사용하는 경우 parse_dates=[['Date', 'Time']]을 사용합니다. ,이 NaN을 변환하고 함께 잘 작동 놀라 울 (나를 위해) :

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] 

참고 :이 그냥있는 가정

당신은 단순히 당신이 to_datetime을 적용 할 수 있도록 (공백) 둘을 추가 할 수 있습니다을 문자열 NaT로 변환하지만 그 변환을 걱정할 가치가 있습니다 (아마도 raise 인수를 사용).

+0

멋지다! 여기에서도 잘 작동합니다.'coerce = True' 할 필요가 없었습니다 – richie

+3

'parse_dates' 옵션은 매우 편리합니다 – onewhaleid

+0

자동 조합 기능에 대해 모르거나 여러 항목과 함께 작동합니다 :'parse_dates = [[ 'Start date' , '시작 시간', '종료 날짜', '종료 시간']))'. Pandas <3 – 5agado

16

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

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

나는 jka.ne 등 의견을 충분히 명성을 가지고 있지 않습니다

나는 그것이 작동하려면 jka.ne's line을 개정했다 : 이것은 다른 사람을 도움이 될

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

.

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) 

은 영업 이익의 경우가 될 것이다 :

또한

, 나는 replace 대신 combine를 사용하여, 다른 접근 방식을 테스트 한

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

내가 타임 모두 비교적 큰 위해 접근 한 데이터 집합 (> 500.000 행)이며 둘 다 비슷한 런타임을 사용하지만 combine을 사용하면 더 빠릅니다 (combine의 경우 replace 대 50의 경우 59 초).

4

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

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

독서 병합 된 열 DATE_TIME와 .csv 파일 :

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

또한 모두 다른 열을 유지하기 위해이 줄을 사용할 수 있습니다.

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

또한 'parser = lambda date : pd.datetime.strptime (날짜,'% d- % b- % y % H : % M : % S ')과 같이 사용자 정의'date_parser'를 사용할 수도 있습니다. – Serendipity

관련 문제