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根据文件大小打log日志
Oct 09 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
python多任务及返回值的处理方法
Jan 22 Python
Python实现Event回调机制的方法
Feb 13 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
python生成任意频率正弦波方式
Feb 25 Python
python实现最短路径的实例方法
Jul 19 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
python如何为list实现find方法
May 30 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 foreach 参数强制类型转换的问题
2010/12/10 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
浅谈js闭包理解
2019/03/28 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
Django admin美化插件suit使用示例
2017/12/12 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
如何唤起类中的一个方法
2013/11/29 面试题
介绍一下UNIX启动过程
2013/11/14 面试题
烹饪自我鉴定
2014/03/01 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
财务统计员岗位职责
2015/04/14 职场文书
工伤调解协议书
2016/03/21 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
详解Python中的进程和线程
2021/06/23 Python
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
Python实现自动玩连连看的脚本分享
2022/04/04 Python
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers