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 相关文章推荐
Django Highcharts制作图表
Aug 27 Python
python爬取各类文档方法归类汇总
Mar 22 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Python多进程fork()函数详解
Feb 22 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
浅析Python中字符串的intern机制
Oct 03 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 Python
Python基础之操作MySQL数据库
May 06 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的5个安全措施小结
2012/07/17 PHP
php获取文件大小的方法
2014/02/26 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP答题类应用接口实例
2015/02/09 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
js微信分享API
2020/10/11 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
Python日期操作学习笔记
2008/10/07 Python
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
详解Django配置优化方法
2019/11/18 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
python如何导入依赖包
2020/07/13 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
教师个人读书活动总结
2014/07/08 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
如何用Laravel包含你自己的帮助函数
2021/05/27 PHP
java实现对Hadoop的操作
2021/07/01 Java/Android