Как можно извлечь функции даты из даты в pandasql?

Мне нужно извлечь функции даты (день, неделя, месяц, год) из столбца даты кадра данных pandas, используя pandasql. Кажется, я не могу найти, какую версию SQL использует pandasql, поэтому я не уверен, как выполнить этот подвиг. Кто-нибудь еще пробовал что-то подобное?

Вот что у меня есть до сих пор:

#import the needed libraries
import numpy as np
import pandas as pd
import pandasql as psql

#establish dataset
doc = 'room_data.csv'
df = pd.read_csv(doc)
df.head()

df2 = psql.sqldf('''
SELECT
    Timestamp
    , EXTRACT (DAY FROM "Timestamp") AS Day --DOES NOT WORK IN THIS VERSION OF SQL
    , Temperature
    , Humidity
    
FROM df
''')
df2.head()

Пример фрейма данных:

введите здесь описание изображения


person tdelozie    schedule 12.01.2021    source источник
comment
Можете ли вы дать образец запрашиваемого вами фрейма данных?   -  person anky    schedule 12.01.2021
comment
Избегайте добавления наборов данных в виде изображений вы можете проверить мой ответ о том, как я создал фиктивный набор данных для дальнейшего использования, прочитайте How чтобы сделать хорошие воспроизводимые примеры панд. Добавил ответ на ваш вопрос, используя pandasql   -  person anky    schedule 12.01.2021


Ответы (2)


Насколько я знаю, SQLite не поддерживает функцию EXTRACT().

Вы можете попробовать strftime('%d', Timestamp)


psql.sqldf('''SELECT

  Timestamp
, strftime('%d', Timestamp) AS Day 
, Temperature
, Humidity

 FROM df
 ''')

Рассмотрим приведенный ниже пример, демонстрирующий приведенный выше запрос:

Пример фрейма данных:

np.random.seed(123)
dates = pd.date_range('01-01-2020','01-05-2020',freq='H')
temp = np.random.randint(0,100,97)
humidity = np.random.randint(20,100,97)
df = pd.DataFrame({"Timestamp":dates,"Temperature":temp,"Humidity":humidity})
print(df.head())

            Timestamp  Temperature  Humidity
0 2020-01-01 00:00:00           66        29
1 2020-01-01 01:00:00           92        43
2 2020-01-01 02:00:00           98        34
3 2020-01-01 03:00:00           17        58
4 2020-01-01 04:00:00           83        39

Рабочий запрос:

import pandasql as ps
query = '''SELECT
      Timestamp
    , strftime('%d', Timestamp) AS Day 
    , Temperature
    , Humidity
    FROM df'''
print(ps.sqldf(query).head())

                    Timestamp Day  Temperature  Humidity
0  2020-01-01 00:00:00.000000  01           66        29
1  2020-01-01 01:00:00.000000  01           92        43
2  2020-01-01 02:00:00.000000  01           98        34
3  2020-01-01 03:00:00.000000  01           17        58
4  2020-01-01 04:00:00.000000  01           83        39

вы можете получить более подробную информацию здесь, чтобы получить больше функций извлечения даты, общие из них показаны ниже:


import pandasql as ps
query = '''SELECT
      Timestamp
    , strftime('%d', Timestamp) AS Day 
    ,strftime('%m', Timestamp) AS Month 
    ,strftime('%Y', Timestamp) AS Year 
    ,strftime('%H', Timestamp) AS Hour 
    , Temperature
    , Humidity
    FROM df'''
print(ps.sqldf(query).head())

                    Timestamp Day Month  Year Hour  Temperature  Humidity
0  2020-01-01 00:00:00.000000  01    01  2020   00           66        29
1  2020-01-01 01:00:00.000000  01    01  2020   01           92        34
2  2020-01-01 02:00:00.000000  01    01  2020   02           98        90
3  2020-01-01 03:00:00.000000  01    01  2020   03           17        32
4  2020-01-01 04:00:00.000000  01    01  2020   04           83        74
person anky    schedule 12.01.2021

Ну вот:

df['year'] = pd.DatetimeIndex(df['date']).year
df['month'] = pd.DatetimeIndex(df['date']).month
df['day'] = pd.DatetimeIndex(df['date']).day
person gtomer    schedule 12.01.2021