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下函数参数的传递(参数带星号的说明)
Sep 19 Python
Python中replace方法实例分析
Aug 20 Python
python动态性强类型用法实例
May 09 Python
python使用urllib2提交http post请求的方法
May 26 Python
Python3 queue队列模块详细介绍
Jan 05 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
Python使用字典的嵌套功能详解
Feb 27 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
Python3.5文件修改操作实例分析
May 01 Python
python生成requirements.txt的两种方法
Sep 18 Python
Python中的list与tuple集合区别解析
Oct 12 Python
python二分法查找算法实现方法【递归与非递归】
Dec 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
杏林同学录(六)
2006/10/09 PHP
利用PHP动态生成VRML网页
2006/10/09 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
使用pycharm和pylint检查python代码规范操作
2020/06/09 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
青年文明号事迹材料
2014/01/18 职场文书
会计毕业自我鉴定
2014/02/05 职场文书
小学安全教育材料
2014/02/17 职场文书
学校师德承诺书
2014/05/23 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
Redis基本数据类型Set常用操作命令
2022/06/01 Redis