pandas: фильтровать данные, используя столбец в метке времени unix

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Один из моих столбцов dataframe содержит метку времени unix. Я ищу способ фильтрации записей по дате, аналогичный этому SQL утверждению:

 SELECT * FROM mytable WHERE to_timestamp(log_time) < '2007-04-13';
  

для фильтрации записей в моем dataframe . Пример записи в dataframe, показанный ниже, где log_time находится между 2007-04-12 и 2007-04-13 :

 df.head(10)
id  log_time    class
154 1176369676  A
161 1176369723  E
76  1176373591  C
97  1176381981  A
76  1176415869  C
82  1176421986  B 
154 1176421986  A
163 1176421986  B
161 1176421986  D
161 1176437973  E
  

Ответ №1:

  • Чтобы использовать логический выбор datetime, log_time столбец необходимо преобразовать в столбец datetime или создать отдельный столбец datetime из log_time .
  • Используйте pandas.to_datetime и укажите unit='s' для этих данных.
 import pandas as pd

# setup the dataframe
data = {'id': [154, 161, 76, 97, 76, 82, 154, 163, 161, 161],
        'log_time': [1176369676, 1176369723, 1176373591, 1176381981, 1176415869, 1176421986, 1176421986, 1176421986, 1176421986, 1176437973],
        'class': ['A', 'E', 'C', 'A', 'C', 'B', 'A', 'B', 'D', 'E']}

df = pd.DataFrame(data)

# create a datetime column from log_time
df['datetime'] = pd.to_datetime(df.log_time, unit='s')

# display(dflhead())
    id    log_time class            datetime
0  154  1176369676     A 2007-04-12 09:21:16
1  161  1176369723     E 2007-04-12 09:22:03
2   76  1176373591     C 2007-04-12 10:26:31
3   97  1176381981     A 2007-04-12 12:46:21
4   76  1176415869     C 2007-04-12 22:11:09

# select data
selected = df[df.datetime > '2007-04-13']

# display(selected)
    id    log_time class            datetime
9  161  1176437973     E 2007-04-13 04:19:33