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中吸引人的一些特性
Apr 09 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 Python
python daemon守护进程实现
Aug 27 Python
Python中表示字符串的三种方法
Sep 06 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
Python 创建空的list,以及append用法讲解
May 04 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
Python异常处理知识点总结
Feb 18 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
Elasticsearch 批量操作
Apr 19 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
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
详解js获取video任意时间的画面截图
2019/04/17 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
python实现搜索本地文件信息写入文件的方法
2016/02/22 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
绘画专业自荐信范文
2014/02/23 职场文书
党员四风剖析材料
2014/08/27 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers