将日期列和时间列合并为日期时间列

2024-05-19 23:02:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的Pandas数据框(通过解析excel文件获得)

|     |     COMPANY NAME           | MEETING DATE        | MEETING TIME|
-----------------------------------------------------------------------|
|YKSGR|    YAPI KREDİ SİGORTA A.Ş. | 2013-12-16 00:00:00 |14:00:00     |
|TRCAS|    TURCAS PETROL A.Ş.      | 2013-12-12 00:00:00 |13:30:00     |

MEETING DATE是具有类似于Timestamp('2013-12-20 00:00:00', tz=None)的表示的时间戳,而MEETING TIME是具有类似于datetime.time(14, 0)的表示的datetime.time对象

我想把MEETING DATEMEETING TIME组合成一列。datetime.combine似乎做了我想做的,但是,我需要以某种方式按列应用此函数。我怎样才能做到这一点?


Tags: 文件数据namepandasdatetimedatetimeexcel
3条回答

您可以使用apply方法,并按如下方式应用combine:

>>> df.apply(lambda x: combine(x['MEETING DATE'], x['MEETING TIME']), axis=1)
0   2013-12-16 14:00:00
1   2013-12-12 13:00:00

其他的解决方案对我不起作用,所以我提出了一个使用replace而不是combine的解决方案:

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
   )

就你而言:

combine_date_time(df, 'MEETING DATE', 'MEETING TIME')

它感觉很慢(我没有正确计时),但它能工作。

更新:我已经为相对较大的数据集(500.000行)的两种方法设置了时间,它们的运行时间都相似,但是使用combine更快(59s表示replace,50s表示combine)。另外,请参见jezrael关于此问题的答案。

UPDATE2:我尝试过jezrael的方法:

def combine_date_time(df, datecol, timecol):
    return pd.to_datetime(df[datecol].dt.date.astype(str)
                          + ' '
                          + df[timecol].astype(str))

相比之下,这种方法的速度更快,jezrael是正确的。虽然我还不能测量,但很明显。

您可以先将Time列转换为string,然后再转换为^{},然后很容易对两列求和:

print (type(df['MEETING DATE'].iat[0]))
<class 'pandas.tslib.Timestamp'>

print (type(df['MEETING TIME'].iat[0]))
<class 'datetime.time'>

print (df['MEETING DATE'] + pd.to_timedelta(df['MEETING TIME'].astype(str)))
YKSGR   2013-12-16 14:00:00
TRCAS   2013-12-12 13:30:00
dtype: datetime64[ns]

相关问题 更多 >