у меня есть dataframe
со столбцом, состоящим из date
объект и столбец, состоящий из time
объект. Мне нужно объединить две колонки.
Лично я считаю, что следующее решение настолько некрасиво. Почему я должен использовать str
? Я создал свое решение на основе на этот ответ
#importing all the necessary libraries
import pandas as pd
import datetime
#I have only to create a Minimal Reproducible Example
time1 = datetime.time(3,45,12)
time2 = datetime.time(3,49,12)
date1 = datetime.datetime(2020, 5, 17)
date2 = datetime.datetime(2021, 5, 17)
date_dict= {"time1":[time1,time2],"date1":[date1,date2]}
df=pd.DataFrame(date_dict)
df["TimeMerge"] = pd.to_datetime(df.date1.astype(str)+' '+df.time1.astype(str))
1 ответ
Мы можем (и должны) позволить пандам справиться с этим за нас и использовать DataFrame.apply
а также datetime.datetime.combine
как это:
df["TimeMerge"] = df.apply(lambda row: datetime.datetime.combine(row.date1, row.time1), axis=1)
Хотя следующий подход является более явным и, следовательно, может быть более читаемым, если вы не знакомы с DataFrame.apply
, Я настоятельно рекомендую первый подход.
Вы также можете вручную отобразить datetime.datetime.combine
над застежкой-молнией date1
а также time1
:
def combine_date_time(d_t: tuple) -> datetime.datetime:
return datetime.datetime.combine(*d_t)
df["TimeMerge"] = pd.Series(map(combine_date_time, zip(df.date1, df.time1)))
Вы также можете встроить его как анонимную лямбда-функцию:
df["TimeMerge"] = pd.Series(map(lambda d_t: datetime.datetime.combine(*d_t), zip(df.date1, df.time1)))
Это удобно для простых операций, но в данном случае я бы не советовал использовать однострочник.
Кстати, ответ, который вы искали также можно найти в вопрос, который вы связали.