Как создать новый столбец в Pandas, используя информацию о дате / времени из других столбцов - PullRequest
1 голос
/ 24 апреля 2020

У меня есть набор данных с данными год / месяц / день / час / минута / секунда, которые хранятся в отдельных столбцах:

Day,Date,Month,Year,Hour,Min,Sec,Wind dir,WS (m/s),Press (hPa),RH (%),T(C),Td(C),SR (W/m2)
Thu,11,April,2019,16,23,27,31,1.28,993.4,38,7,-6.1,470
Thu,11,April,2019,16,24,27,103,1.21,993.5,39,7,-5.9,515

Я импортировал их из файла CSV в Pandas кадр данных:

df = pd.read_csv ('/ Users / jacks / Downloads / Cornell / SP20 / Instrumentation / Lab 5 / EAS2500_MetPak11_18April2019.csv', engine = 'python')

Мне бы хотелось создать новый столбец в этом фрейме данных, который хранит данные даты / времени в формате datetime. Я пробовал это, используя следующий код:

df["Date_Time"] = datetime(df["Year"],df["Month"],df["Day"],df["Hour"],df["Min"],df["Sec"])

Но я получаю следующую ошибку:

raise TypeError(f"cannot convert the series to {converter}")
TypeError: cannot convert the series to <class 'int'>

Почему это не работает и как бы я выполнил sh эту задачу

Ответы [ 3 ]

2 голосов
/ 24 апреля 2020

Использование:

df_time = df[["Year", "Month", "Date", "Hour", "Min", "Sec"]].astype(str).agg("".join, axis=1)
df["Date_Time"] = pd.to_datetime(df_time, format="%Y%B%d%H%M%S")

print(df["Date_Time"])

Печать:

0   2019-04-11 16:23:27
1   2019-04-11 16:24:27
Name: Date_Time, dtype: datetime64[ns]
0 голосов
/ 24 апреля 2020

Попробуйте это:

 df["datetime"] = df[["Year","Month","Date","Hour","Min","Sec"]].astype(str).agg('-'.join, axis=1)
 df["datetime"] = pd.to_datetime(df["datetime"],format="%Y-%B-%d-%H-%M-%S")
0 голосов
/ 24 апреля 2020

Ответ на вопрос в комментарии: как перевести названия месяцев в числа.

Вот пример:

df = pd.DataFrame(["Apr","May"], columns=["Month"])
mnth_to_num = {"Apr":4,"May":5}
df["Month_Num"] = df["Month"].apply(lambda x: mnth_to_num[x])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...