我正在尝试将日期与我的数据框中的多个时间列相结合。我能够遍历每一行,但我对如何组合列感到困惑。例如:
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
.
.
.
使用.iterrows()我可以将其分解为每一行。因此row ['date']将是该特定列的日期。但是,我需要使用datetime将日期与每个列组合在一起。我一直在网上找到各种方法的错误。如果我有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
.
.
.
答案 0 :(得分:1)
您可以先set_index
列date
,然后循环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