Pandas - лучший способ преобразования формата даты - PullRequest
0 голосов
/ 19 июня 2020

У меня есть дата ввода как тип объекта в формате ГГГГ / ММ / ДД, который я хотел бы преобразовать в конце в ММ / ДД / ГГГГ для сообщения о варианте использования.

Есть несколько преобразований на дата подачи, поэтому я сначала конвертирую из типа объекта в тип даты, используя приведенный ниже код. Существуют дополнительные преобразования, основанные на дате заполнения, например: спецификация фильтрации c диапазон дат ...

df_source_data['date'] = pd.to_datetime(df_source_data['date'])

В конце мне понадобится последний набор столбцов из фрейма данных (которые хранятся на config как список), включая дату, однако мне понадобится поле даты в формате MM / DD / YYYY.

final_columns=['date','column1','column2','column3'] # config entry

df_final_data[final_columns] # final select for reporting

Я могу преобразовать формат даты с помощью strftime, как показано ниже, но есть ли лучший способ сделать это вместо добавления отдельной строки снова для преобразования поля в желаемый формат (ie первое преобразование из типа объекта в тип даты, применение фильтров и в конце преобразование даты в желаемый формат), вместо этого это каким-то образом входит в список конфигураций или какой-нибудь лучший способ в коде?

df_final_data['date']=df_final_data['date'].dt.strftime('%m/%d/%Y')

1 Ответ

1 голос
/ 19 июня 2020

Есть ли лучший способ сделать это вместо того, чтобы снова добавлять отдельную строку для преобразования поля в желаемый формат (ie сначала преобразование типа объекта в тип даты, применение фильтров и в конце преобразование даты в желаемый формат) ? TL; DR №

df_source_data['date'] = pd.to_datetime(df_source_data['date']).dt.strftime('%m/%d/%Y')

Это сразу даст вам желаемый формат, однако, если вы применяете преобразования даты и времени между ними, они все равно будут строковыми объектами в pandas, что серьезно ограничивает фильтрацию даты и времени. Например, предположим, что вы хотите подмножество месяца июнь, а затем немедленно преобразовать его в желаемую строку вывода, как вам нужно будет сделать

df_source_data[df_source_data['date'].str[0:2] == '06']

вместо того, чтобы просто иметь возможность

df_source_data[df_source_data['date'].dt.month == 6]

Я бы посоветовал сначала выполнить преобразование to_datetime, как вы говорите, а затем в самом конце преобразовать в желаемый формат.

df_source_data['date'] = pd.to_datetime(df_source_data['date'])
...
df_final_data['date']=df_final_data['date'].dt.strftime('%m/%d/%Y')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...