Как изменить формат даты и времени столбца в кадре данных панд - PullRequest
2 голосов
/ 06 ноября 2019

У меня есть фрейм данных (df2). В нем есть столбец (дата), который содержит некоторую дату и время в формате «Пн 10 августа 11:06:25 UTC 2015». Мне нужно изменить его в формате «10 августа 11:06:25 2015».

Я пробовал следующий код, но он выдает ошибку

df2['date'] = pd.to_datetime(df2['date'], errors='coerce')
df2['date'] = df2['date'].dt.strftime('%b %d %H:%M:%S %Y')
df2

    ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2896             try:
-> 2897                 return self._engine.get_loc(key)
   2898             except KeyError:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'date'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-403-66f0c1caed0e> in <module>
      1 df2 = df2.rename(columns = {'Mon Aug 10 07:56:39 UTC 2015': 'date'})
      2 
----> 3 df2['date'] = pd.to_datetime(df2['date'], errors='coerce')
      4 df2['date'] = df2['date'].dt.strftime('%b %d %H:%M:%S %Y')
      5 df2

~\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2978             if self.columns.nlevels > 1:
   2979                 return self._getitem_multilevel(key)
-> 2980             indexer = self.columns.get_loc(key)
   2981             if is_integer(indexer):
   2982                 indexer = [indexer]

~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2897                 return self._engine.get_loc(key)
   2898             except KeyError:
-> 2899                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2900         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2901         if indexer.ndim > 1 or indexer.size > 1:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'date'

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Самый простой способ это сделать:

import pandas as pd
df2['date'] = pd.to_datetime(df2['date'], errors='coerce')
df2['date'] = df2['date'].dt.strftime('%b %d %H:%M:%S %Y')

Я уверен, что это решит вашу главную проблему. Документация .

С этого момента вы можете легче манипулировать объектом pd.Timestamp , чтобы отображать любой формат, который вы хотите.

Удачи,Пожалуйста, дайте мне знать, если это работает для вас или если вам нужна дополнительная помощь.

Редактировать: @AsraKhalid, я подозреваю, что источник вашей ошибки на самом деле находится в первой строке: df2 =df2.rename (колонки = {'Пн. 10 авг. 07:56:39 UTC 2015': 'дата'}). Вы, вероятно, думаете, что изменяете имя столбца, но на самом деле это опечатка, но об этом не сообщается, поскольку df.rename по умолчанию допускает ошибки. Попробуйте изменить его на df2 = df2.rename (columns = {'Пн. 10 авг. 07:56:39 UTC 2015': 'date'}, ошибки = "повысить"). Таким образом, вы увидите, действительно ли в понедельник «Понедельник 10 августа 07:56:39 UTC 2015» находится в df или вы его неправильно написали

0 голосов
/ 06 ноября 2019

Вы можете использовать метод apply () панд. Пожалуйста, проверьте форматы даты Я не понимаю, почему в вашей отметке времени есть строка UTC. Но, основываясь на вашем вопросе, попробуйте следующий код:

from datetime import datetime

def change_date_string(date_string):

   date_string = str(date_string).replace('UTC', '')
   date_object = datetime.strptime(date_string, "%a %b %d %H:%M:%S %Y").strftime('%b %d %H:%M:%S %Y')
   return date_object

df2['date'] = df2['date'].apply(change_date_string)

Пример:

from datetime import datetime

date_string = 'Mon Aug 10 11:06:25 UTC 2015'
date_string = str(date_string).replace('UTC', '')
date_object = datetime.strptime(date_string, "%a %b %d %H:%M:%S %Y").strftime('%b %d %H:%M:%S %Y')
print(date_object)

Вывод:

Aug 10 11:06:25 2015

Обратите внимание, что вывод будетв строковом формате

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...