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类的多重继承问题深入分析
Nov 09 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
使用Python读取大文件的方法
Feb 11 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
python适合人工智能的理由和优势
Jun 28 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
Python高并发解决方案实现过程详解
Jul 31 Python
python实现不同数据库间数据同步功能
Feb 25 Python
Python3压缩和解压缩实现代码
Mar 01 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
PHP递归的三种常用方式
2019/02/28 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
flask中的wtforms使用方法
2018/07/21 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
机械专业应届生求职信
2013/09/21 职场文书
应届生妇产科护士求职信
2013/10/27 职场文书
个人求职信范文分享
2014/01/06 职场文书
法制教育主题班会
2015/08/13 职场文书
PHP基本语法
2021/03/31 PHP
详解用Python把PDF转为Word方法总结
2021/04/27 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫