如何从 pandasql 中的日期中提取日期特征?

问题描述

我需要使用 pandasql 从 pandas 数据框的日期列中提取日期特征(日、周、月、年)。我似乎无法找到正在使用的 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()

数据框示例:

enter image description here

解决方法

据我所知,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,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,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

可以获取更多详情here获取更多日期提取功能,常见的如下所示:


import pandasql as ps
query = '''SELECT
      Timestamp,strftime('%m',Timestamp) AS Month,strftime('%Y',Timestamp) AS Year,strftime('%H',Timestamp) AS Hour,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
,

给你:

df['year'] = pd.DatetimeIndex(df['date']).year
df['month'] = pd.DatetimeIndex(df['date']).month
df['day'] = pd.DatetimeIndex(df['date']).day

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...