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 相关文章推荐
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
详细解析Python当中的数据类型和变量
Apr 25 Python
Python定时执行之Timer用法示例
May 27 Python
Python的Django框架中设置日期和字段可选的方法
Jul 17 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
用python制作游戏外挂
Jan 04 Python
python在每个字符后添加空格的实例
May 07 Python
Python 多维List创建的问题小结
Jan 18 Python
Python函数中的可变长参数详解
Sep 12 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 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
用文本文件制作留言板提示(下)
2006/10/09 PHP
?算你??的 PHP 程式大小
2006/12/06 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
详解React Native 采用Fetch方式发送跨域POST请求
2017/11/15 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
python验证码识别教程之滑动验证码
2018/06/04 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
2018/06/22 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
pygame实现烟雨蒙蒙下彩虹雨
2019/11/11 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
通过实例解析python and和or使用方法
2020/11/14 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
Java基础面试题
2012/11/02 面试题
Ejb技术面试题
2015/04/29 面试题
工程部主管岗位职责
2013/11/17 职场文书
中学教师岗位职责
2013/11/26 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
大国崛起日本观后感
2015/06/02 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
MySQL数字类型自增的坑
2021/05/07 MySQL