我们知道,使用 SQL 语句能够完成对 table 的增删改查操作,Pandas 同样也可以实现 SQL 语句的基本功能。本节主要讲解 Pandas 如何执行 SQL 操作。

首先加载一个某连锁咖啡厅地址分布的数据集,通过该数据集对本节内容进行讲解。

  1. import pandas as pd
  2. url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
  3. coffee_df=pd.read_excel(url)
  4. coffee_df.head()

输出结果如下:

   address                                    category           id                     tel
0 北京市东城区南竹竿胡同2号1幢2层30212号银河SOHOC座 娱乐休闲:咖啡厅 1874263549184796345 010-85179080
1 北京市东城区东直门内大街277-31号档口 娱乐休闲:咖啡厅 1461638360847848424 400-669-2002
2 北京市东城区王府井东街8号澳门中心L117商场102室 娱乐休闲:咖啡厅 1308505235389562852 400-010-0100
3 北京市东城区前门大街108号底商 娱乐休闲:咖啡厅 15442844740539053384
4 北京市东城区和平里西街51号雍和宫壹中心A座负一层 娱乐休闲:咖啡厅 2357391864111641256 4000100100

SELECT

在 SQL 中,SELECT 查询语句使用,把要查询的每个字段分开,当然您也可以使用*来选择所有的字段。如下所示:

SELECT address, category, id, tel FROM tips LIMIT 5;

对于 Pandas 而言,要完成 SELECT 查询,需要把数据集每一列(columns)的名称传递给 DataFrame 对象。如下所示:

coffee_df[['address','category','id','tel']].head()

下面代码是 Pandas 执行 SELECT 查询的完整程序:

  1. import pandas as pd
  2. url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
  3. coffee_df=pd.read_excel(url)
  4. #只查看尾3行
  5. coffee_df[['address', 'category', 'id', 'tel']].tail(3)

输出结果如下:

      address                                           category         id                    tel
28912 新疆维吾尔自治区北屯市芳园路69-2-12 娱乐休闲:咖啡厅 7443833746160692626
28913 新疆维吾尔自治区北屯市北屯购物公园7-1-7 娱乐休闲:咖啡厅 15288143245642241877
28914 新疆维吾尔自治区可克达拉市人民西路与育才路交叉口西北50米 娱乐休闲:咖啡厅 17884214706482955

假如您传入的是一个空列表, 那最终结果将输出所有的行索引标签。

WHERE

SQL 中的条件查询是通过 WHERE 子句完成的。格式如下所示:

SELECT * FROM coffee_df WHERE tel = '010-85179080';

然而 DataFrame 可以通过多种方式实现条件筛选,最直观的方法是通过布尔索引:

coffee_df[coffee_df['id'] == '1461638360847848424']

完整程序如下:

  1. import pandas as pd
  2. url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
  3. coffee_df=pd.read_excel(url)
  4. coffee_df[coffee_df['tel'] == '400-010-0100'].head(5)

输出结果如下:

address                                        category      id                  tel
2 北京市东城区王府井东街8号澳门中心L117商场102室 娱乐休闲:咖啡厅 1308505235389562852 400-010-0100
5 北京市东城区崇文门外大街3号崇文新世界百货一期南门一层 娱乐休闲:咖啡厅 3294587167648650139 400-010-0100
6 北京市东城区东四北大街265号文化金融大厦1层大堂 娱乐休闲:咖啡厅 3046481700882245722 400-010-0100
7 北京市东城区珠市口东大街2号丰泰中心1层 娱乐休闲:咖啡厅 3218554253235914037 400-010-0100
9 北京市东城区怡生健身居然大厦店休闲区 娱乐休闲:咖啡厅 3141197020974020427 400-010-0100

上面的语句通过布尔运算将 True 或 False 对象传递给 DataFrame 对象,然后返回所有为 True 的行。

GroupBy

在 SQL 语句中,通过 GroupBy 操作可以获取 table 中一组记录的计数。示例如下:

SELECT id, count(*) FROM tips GROUP BY id;

而 Pandas 可通过以下代码实现:

coffe_df.groupby('id').size()

完整的程序如下所示:

  1. import pandas as pd
  2. url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
  3. coffee_df=pd.read_excel(url)
  4. print(coffee_df.groupby('id').size())

输出结果:

id
938817537566269 1
1343221331916894 1
2068013370184103 1
2147497429057385 1
4021181356852391 1
..
18443951046631684378 1
18444337559943971606 1
18444494959108924300 1
18445005868173060838 1
18446259420330511125 1
Length: 23240, dtype: int64

LIMIT

在 SQL 中,LIMIT 语句主要起到限制作用,比如查询前 n 行记录:

SELECT * FROM coffee_df LIMIT n;

而在 Pandas 中,您可以通过 head() 来实现(默认前 5 行),示例如下:

  1. import pandas as pd
  2. url = 'C:/Users/Administrator/Desktop/coffee/kafei.xlsx'
  3. coffee_df=pd.read_excel(url)
  4. coffee_df[['address', 'tel']].head(3)

输出结果:

  address                                       tel
0 北京市东城区南竹竿胡同2号1幢2层30212号银河SOHOC座 010-85179080
1 北京市东城区东直门内大街277-31号档口 400-669-2002
2 北京市东城区王府井东街8号澳门中心L117商场102室 400-010-0100

本节主要通过对比的方式对 SQL 和 Pandas 做了简单讲解,希望对您有所帮助。

pandas之sql操作的更多相关文章

  1. Pandas与SQL比较

    由于许多潜在的Pandas用户对SQL有一定的了解,因此本文章旨在提供一些如何使用Pandas执行各种SQL操作的示例. import pandas as pd url = 'tips.csv' ti ...

  2. “真”pandas“假”sql

    这篇博客利用了 pandas 对数据像 sql 一样去处理. 读取测试数据 import pandas as pd import numpy as np url = 'https://raw.gith ...

  3. 【Pandas vs SQL】数据分析代码逐行比对,孰优孰劣?

    在数据分析领域,pandas是python数据分析基础工具,SQL是数据库最常用分析语言.二者有相通的地方,也有很大的语法不同,做起数据分析来,谁将更胜一筹呢? 做过业务开发.跟数据库打交道比较多的小 ...

  4. 数据库优化和SQL操作的相关题目

    SQL操作 1.有一个数据库表peope,表有字段name,age,address三个属性(注:没有主键).现在如果表中有重复的数据,请删去重复只留下其中的一条.重复的定义就是两条记录的name,ag ...

  5. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  6. mongodb 操作语句与sql操作语句对比

    上行:SQL 操作语句 下行:Mongo 操作语句 CREATE TABLE USERS (a Number, b Number) db.createCollection("mycoll&q ...

  7. 避免循环做SQL操作

    经常犯的错误是把一个SQL 操作放置到一个循环中, 这就导致频繁的访问数据库,更重要的是, 这会直接导致脚本的性能低下.以下的例子, 你能够把一个循环操作重置为一个单一的SQL语句. foreach ...

  8. sql操作一般函数

    sql操作一般函数 函数一般语法:SELECT function(列) FROM 表 函数的基本类型是: Aggregate 合计函数:函数的操作面向一系列的值,并返回一个单一的值. Scalar 函 ...

  9. flask 操作mysql的两种方式-sql操作

    flask 操作mysql的两种方式-sql操作 一.用常规的sql语句操作 # coding=utf-8 # model.py import MySQLdb def get_conn(): conn ...

  10. pandas的apply操作

    pandas的apply操作类似于Scala的udf一样方便,假设存在如下dataframe: id_part pred pred_class v_id 0 d [0.722817, 0.650064 ...

随机推荐

  1. 类内函数的override问题-方法

    Question: have a base class with a virtual function: class Base { public: virtual void Function(); } ...

  2. python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)

    @ 目录 一.准备工作 1.PyQt5 2.qtawesome 二.预览 1.启动 2.歌曲搜索 3.歌曲播放 4.评论查看 5.自定义背景 6.设置-基本设置 7.设置-高级设置 8.定时任务 三. ...

  3. C#/.Net 部分缩写

    CTS(Common Type System):通用类型系统:指定最基本类型便于.Net Framework的各种语言之间进行交互. CLR(Common Language Runtime):.Net ...

  4. day28_常用模块——hashlib,logging模块

    hashlib(摘要算法) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...

  5. Code UTF-8 Console GB2312 Linux 中文乱码

    Linux 系统方法:  LD_LIBRARY_PATH=. ./userdemo | iconv -f GB2312 -t utf8 Shell 方法  Shell 编码 改成GB2312 // 编 ...

  6. The Little Book of Rust Books

    https://lborb.github.io/book/title-page.html https://blog.logrocket.com/unsafe-rust-how-and-when-not ...

  7. 1008.Django模型基础03

    一.关系表的数据操作 关系表中的数据操作 查看数据库中的表结构 一对多表关系数据的添加: 1. 第一种方式就是跟之前一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已存在的值: 2. 第二种 ...

  8. 用反证法说明List<Object>和List<String>不存在子父类关系可行吗?

    看宋红康老师的Java基础视频讲解,视频中用反证法证明List

  9. git 更改子项目索引

    git update-index --cacheinfo 160000 97ed2f63b07c73bad9a4d55e96e25292 source/lvdao/crf-sdk git reset ...

  10. 制作mnist格式数据集

    import os from PIL import Image from array import * from random import shuffle # # 文件组织架构: # ├──trai ...