У меня есть этот столбец date с 6 различными размерами строк даты:
df = pd.DataFrame({'date': {0: '2020-03-21T10:13:08', 1: '2020-03-21T17:43:03', 2: '2020-03-21T13:13:30', 3: '2020-03-21T20:43:02', 4: '3/8/20 5:31', 5: '3/8/20 5:19', 6: '3/22/20 23:45', 7: '3/22/20 23:45', 8: '2/1/2020 11:53', 9: '2/1/2020 10:53', 10: '1/31/2020 15:20', 11: '1/31/2020 10:37', 12: '2020-04-04 23:34:21', 13: '2020-04-04 23:34:21'}},
index=range(0,14))
Мне нужно преобразовать все эти строки datetime в формат даты. Подход, который я использую:
Найдите первый пробел и извлеките дату
Измените его формат, учитывая определенную длину строки ( каждая длина строки имеет определенный c формат даты, как показано ниже в аргументе format
)
Do (2) в соответствующих строках в кадре данных df
.
Вы можете увидеть этот подход здесь:
df.loc[df["date"].str.find(" ") == 10, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 10, "date"].str[0:10])
df.loc[df["date"].str.find(" ") == -1, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 10, "date"].str[0:10])
df.loc[df["date"].str.find(" ") == 6, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 6, "date"].str[0:6], format="%m/%d/%y")
df.loc[df["date"].str.find(" ") == 7, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 7, "date"].str[0:7], format="%m/%d/%y")
df.loc[df["date"].str.find(" ") == 8, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 8, "date"].str[0:8], format="%m/%d/%Y")
df.loc[df["date"].str.find(" ") == 9, "date"] = pd.to_datetime(df.loc[df["date"].str.find(" ") == 9, "date"].str[0:9], format="%m/%d/%Y")
Я иду идеально до шага 3), где я пытаюсь найти обходной путь, чтобы сделать все изменения формата в кадре данных, но я не могу понять, почему он не дает то, что он должен дать. Есть предложения?
Кстати, он должен быть масштабируемым (у меня много строк на строку формата)