对Python中的Pandas进行SQL查询——pandasql

背景

  • 众所周知,用SQL语句进行数据查询十分方便,因为跟自然语言更接近。
  • pandas其实是模仿R语言中的DataFrame设计的一个Python库。
  • R语言中可以使用sqldf实现SQL查询;pandas中也有类似的库:pandasql。

pandasql介绍

  • Overview
    pandasql allows you to query pandas DataFrames using SQL syntax. It works similarly to sqldf in R. pandasql seeks to provide a more familiar way of manipulating and cleaning data for people new to Python or pandas.
  • Installation
    You can use pip to install pandasql. Alternatively, you can clone the Github repo and install from source.
$ pip install -U pandasql
  • Basics
    The main function used in pandasql is sqldf. sqldf accepts 2 parametrs:
    • a sql query string
    • a set of session/environment variables (locals() or globals())
      Specifying locals() or globals() can get tedious. You can define a short helper function to fix this.

      from pandasql import sqldf
      pysqldf = lambda q: sqldf(q, globals())

应用实例

我们使用sklearn中的iris数据集进行练习。iris保存了150朵鸢尾花的4个独立的属性,这些属性变量反映了花朵特征,如萼片和花瓣的长度。
from pandasql import sqldf
from sklearn.datasets import load_iris#导入数据集
iris = load_iris()
print iris.DESCR#对数据集进行描述

print iris.feature_names#查看属性名称(列表)
print iris.data[:10]#查看数据(列表)

#首先需要将列表式的数据转化为数据框DataFrame
import re
columns=[re.sub("[() ]", "", col) for col in iris_df.columns]#为了符合SQL语法,必须去掉'(cm)'
iris_df = pd.DataFrame(iris.data, columns=columns)#转数据框

#iris数据集还给出了一个分类信息,共3类,将其作为数据框新的一列
print iris.target
print iris.target_names
iris_df['species']=[iris.target_names[i] for i in iris.target]
iris_df.head(10)

输出:


这里写图片描述

接下来开始使用SQL操作这个DataFrame:

pysqldf = lambda q: sqldf(q, globals())#为了避免每次都要传入dataframes,可以定义一个lambda
pysqldf("select sepalwidthcm, species from iris_df limit 10;", locals())#选出前10行的某两列

#分组统计平均值,最小值和最大值
q = """
      select
        species
        , avg(sepalwidthcm)
        , min(sepalwidthcm)
        , max(sepalwidthcm)
      from
        iris_df
      group by
        species;
    """
pysqldf("q")
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值