2017-03-03 156 views
0

我想將日期結合到我的數據框中的多個時間列。我能夠遍歷每一行,但我很困惑我如何組合列。例如:結合使用日期時間的日期和時間列

date  first_time second_time .... 
0 2008/09/11 12:32  17:56 
1 2016/12/02 06:43  14:02 
2 2001/01/01 02:45  20:13 
. 
. 
. 

With .iterrows()我可以將它分解爲每行。因此,行['date']將是該特定列的日期。但是,我需要使用日期時間將日期與每個列組合在一起。我一直在爲我在網上找到的各種方法收集錯誤。如果我有row ['date']和row ['first_time'],我怎樣才能將它們結合到數據框中(還有日期和其他時間列)?

最終的結果應該是這樣的:

first_datetime  second_datetime .... 
0 2008/09/11 12:32  2008/09/11 17:56 
1 2016/12/02 06:43  2016/12/02 14:02 
2 2001/01/01 02:45  2001/01/01 20:13 
. 
. 
. 

回答

1

你可以先set_indexdate列,然後在time列的循環轉換to_datetime

df = df.set_index('date') 
for col in df.columns: 
    df[col] = pd.to_datetime(df.index + df[col], format='%Y/%m/%d%H:%M') 
#if necessary rename columns 
df.columns = df.columns.str.replace('time','datetime') 
df = df.reset_index(drop=True) 
print (df) 
     first_datetime  second_datetime 
0 2008-09-11 12:32:00 2008-09-11 17:56:00 
1 2016-12-02 06:43:00 2016-12-02 14:02:00 
2 2001-01-01 02:45:00 2001-01-01 20:13:00 

print (df.dtypes) 
first_datetime  datetime64[ns] 
second_datetime datetime64[ns] 
dtype: object 

更多動態的解決方案轉換隻列有time的名稱:

df = df.set_index('date') 
#extract only time columns 
cols = df.columns[df.columns.str.contains('time')] 
for col in cols: 
    df[col] = pd.to_datetime(df.index + df[col], format='%Y/%m/%d%H:%M') 
df.columns = df.columns.str.replace('time','datetime') 
df = df.reset_index(drop=True) 
print (df) 
     first_datetime  second_datetime 
0 2008-09-11 12:32:00 2008-09-11 17:56:00 
1 2016-12-02 06:43:00 2016-12-02 14:02:00 
2 2001-01-01 02:45:00 2001-01-01 20:13:00