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扫描IP段查看指定端口是否开放的方法
Jun 09 Python
Python如何实现守护进程的方法示例
Feb 08 Python
python对象与json相互转换的方法
May 07 Python
python之pexpect实现自动交互的例子
Jul 25 Python
查看端口并杀进程python脚本代码
Dec 17 Python
postman和python mock测试过程图解
Feb 22 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
Python 中由 yield 实现异步操作
May 04 Python
python线程池如何使用
May 28 Python
Python基础之hashlib模块详解
May 06 Python
Python中使用subprocess库创建附加进程
May 11 Python
Python编程编写完善的命令行工具
Sep 15 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
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
对xmlHttp对象的理解
2011/01/17 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python实现一个简单的MySQL类
2015/01/07 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
对Python+opencv将图片生成视频的实例详解
2019/01/08 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
django 消息框架 message使用详解
2019/07/22 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
行政助理岗位职责
2013/11/10 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
优秀毕业生事迹材料
2014/02/12 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
英语辞职信范文
2015/02/28 职场文书
入党函调证明材料
2015/06/19 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android