#python #python-3.x #pandas #dataframe #python-datetime
#python #python-3.x #pandas #фрейм данных #python-datetime
Вопрос:
Я хотел бы преобразовать столбец dataframe, который содержит строку даты. Но в некоторых случаях строка даты может быть пустой из-за определенных условий. Итак, я просто хочу, чтобы все остальные строки в этом столбце были преобразованы в формат datetime, за исключением строк в этом конкретном столбце, которые могут быть пустыми. Возможно ли это?
Что я пробовал до сих пор:
Вариант 1:
df['etime'] = pd.to_datetime(df['etime'],errors='ignore').dt.strftime('%Y-%m-%d %H:%M')
Вариант 2:
for ind in df.index:
if (df['etime'].str.len()[ind] == 0) :
df.loc[ind, 'etime'] = "----"
else:
df.loc[ind, 'etime'] = <need to convert this row to datetime>
Пожалуйста, предоставьте свои предложения.
Пример фрейма данных:
data = pd.DataFrame({
'day' : [15, 17, 20, 14, 25],
'etime': ["20200811235205", "", "20200811215205", "20200811225205", "20200811235203"]
})
Комментарии:
1. показать данные в dataframe
2. что
pd.to_datetime(df['etime'],errors='ignore')
делает?3. @Manakin — > Он просто преобразует в datetime соответствующие строки, но не выполняет форматирование «%Y-%m-%d %H:%M»
Ответ №1:
Два шага:
Сначала давайте создадим ряд с вашими datetimes и принудительно введем неверные значения в NaTs
:
s = pd.to_datetime(data['etime'],errors='coerce',format='%Y%m%d%H%M%S')
Во-вторых, давайте найдем любые значения, которые не являются NaT
и заменим их вашим целевым форматированием:
data.loc[~s.isna(),'etime'] = s.dt.strftime('%Y-%m-%d %H:%M')
day etime
0 15 2020-08-11 23:52
1 17
2 20 2020-08-11 21:52
3 14 20200811265205
4 25 2020-08-11 23:52
- предполагая, что 26 — это опечатка в вашем часовом столбце с индексом 3.
Комментарии:
1. Спасибо @manakin, Да, индекс 3 был опечаткой, сейчас я это исправил.
Ответ №2:
Вы можете попробовать что-то вроде:
df["etime"] = df["etime"].apply(lambda x: pd.to_datetime(x,errors='ignore').strftime('%Y-%m-%d %H:%M') if len(x) !=0 else "----")
Комментарии:
1. Попробовал это, это выдает ошибку ===> ‘AttributeError: объект ‘str’ не имеет атрибута ‘str’
2. Попробуйте сейчас, без данных я не смогу это протестировать.