pandas数据筛选和csv操作的实现方法


Posted in Python onJuly 02, 2019

1. 数据筛选

a b c
0 0 2 4
1 6 8 10
2 12 14 16
3 18 20 22
4 24 26 28
5 30 32 34
6 36 38 40
7 42 44 46
8 48 50 52
9 54 56 58

(1)单条件筛选

df[df['a']>30]
# 如果想筛选a列的取值大于30的记录,但是之显示满足条件的b,c列的值可以这么写
df[['b','c']][df['a']>30]
# 使用isin函数根据特定值筛选记录。筛选a值等于30或者54的记录
df[df.a.isin([30, 54])]

(2)多条件筛选

可以使用&(并)与| (或)操作符或者特定的函数实现多条件筛选

# 使用&筛选a列的取值大于30,b列的取值大于40的记录
df[(df['a'] > 30) & (df['b'] > 40)]

(3)索引筛选

a. 切片操作

df[行索引,列索引]或df[[列名1,列名2]]

#使用切片操作选择特定的行
df[1:4]
#传入列名选择特定的列
df[['a','c']]

b. loc函数

当每列已有column name时,用 df [ ‘a' ] 就能选取出一整列数据。如果你知道column names 和index,且两者都很好输入,可以选择 .loc同时进行行列选择。

In [28]: df.loc[0,'c']
Out[28]: 4

In [29]: df.loc[1:4,['a','c']]
Out[29]:
 a c
1 6 10
2 12 16
3 18 22
4 24 28

In [30]: df.loc[[1,3,5],['a','c']]
Out[30]:
 a c
1 6 10
3 18 22
5 30 34

c. iloc函数

如果column name太长,输入不方便,或者index是一列时间序列,更不好输入,那就可以选择 .iloc了,该方法接受列名的index,iloc 使得我们可以对column使用slice(切片)的方法对数据进行选取。这边的 i 我觉得代表index,比较好记点。

In [35]: df.iloc[0,2]
Out[35]: 4

In [34]: df.iloc[1:4,[0,2]]
Out[34]:
 a c
1 6 10
2 12 16
3 18 22

In [36]: df.iloc[[1,3,5],[0,2]]
Out[36]:
 a c
1 6 10
3 18 22
5 30 34

In [38]: df.iloc[[1,3,5],0:2]
Out[38]:
 a b
1 6 8
3 18 20
5 30 32

d. ix函数

ix的功能更加强大,参数既可以是索引,也可以是名称,相当于,loc和iloc的合体。需要注意的是在使用的时候需要统一,在行选择时同时出现索引和名称, 同样在同行选择时同时出现索引和名称。

df.ix[1:3,['a','b']]
Out[41]:
 a b
1 6 8
2 12 14
3 18 20

In [42]: df.ix[[1,3,5],['a','b']]
Out[42]:
 a b
1 6 8
3 18 20
5 30 32

In [45]: df.ix[[1,3,5],[0,2]]
Out[45]:
 a c
1 6 10
3 18 22
5 30 34

e. at函数

根据指定行index及列label,快速定位DataFrame的元素,选择列时仅支持列名。

In [46]: df.at[3,'a']
Out[46]: 18

f. iat函数

与at的功能相同,只使用索引参数

In [49]: df.iat[3,0]
Out[49]: 18

2. csv操作

csv文件内容

Supplier Name,Invoice Number,Part Number,Cost,Purchase Date
Supplier X,001-1001,2341,$500.00 ,1/20/14
Supplier X,001-1001,2341,$500.00 ,1/20/14
Supplier X,001-1001,5467,$750.00 ,1/20/14
Supplier X,001-1001,5467,$750.00 ,1/20/14
Supplier Y,50-9501,7009,$250.00 ,1/30/14
Supplier Y,50-9501,7009,$250.00 ,1/30/14
Supplier Y,50-9505,6650,$125.00 ,2002/3/14
Supplier Y,50-9505,6650,$125.00 ,2002/3/14
Supplier Z,920-4803,3321,$615.00 ,2002/3/14
Supplier Z,920-4804,3321,$615.00 ,2002/10/14
Supplier Z,920-4805,3321,$615.00 ,2/17/14
Supplier Z,920-4806,3321,$615.00 ,2/24/14

(1)csv文件读写

关于read_csv函数中的参数说明参考博客:https://3water.com/article/164445.htm

import pandas as pd

# 读写csv文件
df = pd.read_csv("supplier_data.csv")
df.to_csv("supplier_data_write.csv",index=None)

(2)筛选特定的行

#Supplier Nmae列中姓名包含'Z',或者Cost列中的值大于600
print(df[df["Supplier Name"].str.contains('Z')])
print(df[df['Cost'].str.strip('$').astype(float) > 600])
print(df.loc[(df["Supplier Name"].str.contains('Z'))|(df['Cost'].str.strip('$').astype(float) > 600.0),:])

#行中的值属于某个集合
li = [2341,6650]
print(df[df['Part Number'].isin(li)])
print(df.loc[df['Part Number'].astype(int).isin(li),:])

#行中的值匹配某个模式
print(df[df['Invoice Number'].str.startswith("001-")])

 (3)选取特定的列

#选取特定的列
#列索引值,打印1,3列
print(df.iloc[:,1:4:2])
#列标题打印
print(df.loc[:,["Invoice Number", "Part Number"]])
#选取连续的行
print(df.loc[1:4,:])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中xrange和range的区别
May 13 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
pandas groupby 分组取每组的前几行记录方法
Apr 20 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
Python解析命令行读取参数之argparse模块
Jul 26 Python
Python List列表对象内置方法实例详解
Oct 22 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
Nov 12 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
Python图片检索之以图搜图
May 31 Python
Python列表与元组的异同详解
Jul 02 #Python
Pandas中resample方法详解
Jul 02 #Python
Python何时应该使用Lambda函数
Jul 02 #Python
Python Pandas分组聚合的实现方法
Jul 02 #Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 #Python
python flask框架实现重定向功能示例
Jul 02 #Python
python实现串口自动触发工作的示例
Jul 02 #Python
You might like
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
jQuery EasyUI 中文API Button使用实例
2010/04/14 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
jQuery复合事件用法示例
2017/06/10 jQuery
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
python通过exifread模块获得图片exif信息的方法
2015/03/16 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
python调用百度语音REST API
2018/08/30 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
django2笔记之路由path语法的实现
2019/07/17 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
python中的yield from语法快速学习
2020/11/06 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
如何安装ruby on rails
2014/02/09 面试题
销售顾问工作计划书
2014/08/15 职场文书
文明单位创建材料
2014/12/24 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
护士医德医风心得体会
2016/01/25 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
Redis分布式锁的7种实现
2022/04/01 Redis