Pandas объединяет столбец даты «% Y% M% D» со столбцом времени «% H:% M:% S».

у меня есть 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 ответ
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)))

Это удобно для простых операций, но в данном случае я бы не советовал использовать однострочник.


Кстати, ответ, который вы искали также можно найти в вопрос, который вы связали.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *