2013-05-13 3 views
9

Моя заявка приходится иметь дело с данными (содержатся в CSV), который имеет следующий вид:Панда: Использование Unix эпоха метки времени как индекс Datetime

Epoch (number of seconds since Jan 1, 1970), Value 
1368431149,20.3 
1368431150,21.4 
.. 

В настоящее время я прочитал CSV, используя Numpy метод loadtxt (может легко используйте read_csv из Pandas). В настоящее время для моей серии я преобразование временных меток поля следующим образом:

timestamp_date=[datetime.datetime.fromtimestamp(timestamp_column[i]) for i in range(len(timestamp_column))] 

Я следую, установив timestamp_date как индекс Datetime для моего DataFrame. Я попытался найти в нескольких местах, чтобы узнать, есть ли более быстрый (встроенный) способ использования этих временных меток Unix, но не нашел их. Многие приложения используют такую ​​временную терминологию.

  1. Есть ли встроенный метод обработки таких временных шаблонов?
  2. Если нет, то каков рекомендуемый способ обработки этих форматов?

ответ

15

Преобразование их в datetime64[s]:

np.array([1368431149, 1368431150]).astype('datetime64[s]') 
# array([2013-05-13 07:45:49, 2013-05-13 07:45:50], dtype=datetime64[s]) 
+1

Вау! Не знал, что это может быть так просто! Наилучшая часть состоит в том, что он сохраняет ощущение векторной операции. –

+3

N.B. https://github.com/pydata/pandas/issues/3540 –

12

Вы также можете использовать панд to_datetime:

df['datetime'] = pd.to_datetime(df["timestamp"], unit='s') 

Этот метод требует Панды 0,18 или более поздней версии.

1

Вы также можете использовать панды DatetimeIndex как так

pd.DatetimeIndex(df['timestamp']*10**9) 

*10**9 ставит его в формат он ожидает таких временных меток.

Это приятно, так как позволяет использовать такие функции, как .date() или .tz_localize().