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 random模块用法解析及简单示例
Dec 18 Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
python中的itertools的使用详解
Jan 13 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
python如何利用Mitmproxy抓包
Oct 10 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
python 实现全球IP归属地查询工具
Dec 18 Python
Django自带的用户验证系统实现
Dec 18 Python
Python爬虫之爬取某文库文档数据
Apr 21 Python
Python OpenCV实现图形检测示例详解
Apr 08 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
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
$()JS小技巧
2007/07/21 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
javascript event 事件解析
2011/01/31 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
Python中的自定义函数学习笔记
2014/09/23 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
python绘制规则网络图形实例
2019/12/09 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
解决keras backend 越跑越慢问题
2020/06/18 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
AOP的定义以及作用
2013/09/08 面试题
软件设计的目标是什么
2016/12/04 面试题
党课知识竞赛主持词
2014/04/01 职场文书
个人承诺书怎么写
2014/05/24 职场文书
2015年团支书工作总结
2015/04/03 职场文书
小学生读书笔记范文
2015/06/30 职场文书
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
httpclient调用远程接口的方法
2022/08/14 Java/Android