pandas数据清洗,排序,索引设置,数据选取方法


Posted in Python onMay 18, 2018

此教程适合有pandas基础的童鞋来看,很多知识点会一笔带过,不做详细解释

Pandas数据格式

Series

DataFrame:每个column就是一个Series

基础属性shape,index,columns,values,dtypes,describe(),head(),tail()

统计属性Series: count(),value_counts(),前者是统计总数,后者统计各自value的总数

df.isnull() df的空值为True

df.notnull() df的非空值为True

修改列名

df.rename(columns = {'key':'key2'},inplace=True)

更改数据格式astype()

isin     #计算一个“Series各值是否包含传入的值序列中”的布尔数组
unique    #返回唯一值的数组
value_counts   #返回一个Series,其索引为唯一值,值为频率,按计数降序排列

数据清洗

丢弃值drop()

df.drop(labels, axis=1)# 按列(axis=1),丢弃指定label的列,默认按行。。。

丢弃缺失值dropna()

# 默认axi=0(行);1(列),how=‘any'
df.dropna()#每行只要有空值,就将这行删除
df.dropna(axis=1)#每列只要有空值,整列丢弃
df.dropna(how='all')# 一行中全部为NaN的,才丢弃该行
df.dropna(thresh=3)# 每行至少3个非空值才保留

缺失值填充fillna()

df.fillna(0)
df.fillna({1:0,2:0.5}) #对第一列nan值赋0,第二列赋值0.5
df.fillna(method='ffill') #在列方向上以前一个值作为值赋给NaN

值替换replace()

# 将df的A列中 -999 全部替换成空值
df['A'].replace(-999, np.nan)
#-999和1000 均替换成空值
obj.replace([-999,1000], np.nan)
# -999替换成空值,1000替换成0
obj.replace([-999,1000], [np.nan, 0])
# 同上,写法不同,更清晰
obj.replace({-999:np.nan, 1000:0})

重复值处理duplicated(),unique(),drop_duplictad()

df.duplicated()#两行每列完全一样才算重复,后面重复的为True,第一个和不重复的为false,返回true
    #和false组成的Series类型
df.duplicated('key')#两行key这一列一样就算重复

df['A'].unique()# 返回唯一值的数组(类型为array)

df.drop_duplicates(['k1'])# 保留k1列中的唯一值的行,默认保留第一行
df.drop_duplicates(['k1','k2'], take_last=True)# 保留 k1和k2 组合的唯一值的行,take_last=True 保留最后一行

排序

索引排序

# 默认axis=0,按行索引对行进行排序;ascending=True,升序排序
df.sort_index()
# 按列名对列进行排序,ascending=False 降序
df.sort_index(axis=1, ascending=False)

值排序

# 按值对Series进行排序,使用order(),默认空值会置于尾部
s = pd.Series([4, 6, np.nan, 2, np.nan])
s.order()

df.sort_values(by=['a','b'])#按列进行排序

排名

a=Series([7,-5,7,4,2,0,4])
a.rank()#默认method='average',升序排名(ascending=True),按行(axis=0)
#average 值相等时,取排名的平均值
#min 值相等时,取排名最小值
#max 值相等时,取排名最大值
#first值相等时,按原始数据出现顺序排名

索引设置

reindex()

更新index或者columns,

默认:更新index,返回一个新的DataFrame

# 返回一个新的DataFrame,更新index,原来的index会被替代消失
# 如果dataframe中某个索引值不存在,会自动补上NaN
df2 = df1.reindex(['a','b','c','d','e'])

# fill_valuse为原先不存在的索引补上默认值,不在是NaN
df2 = df1.reindex(['a','b','c','d','e'], fill_value=0)

# inplace=Ture,在DataFrame上修改数据,而不是返回一个新的DataFrame
df1.reindex(['a','b','c','d','e'], inplace=Ture)

# reindex不仅可以修改 索引(行),也可以修改列
states = ["Texas","Utah","California"]
df2 = df1.reindex( columns=states )

set_index()

将DataFrame中的列columns设置成索引index

打造层次化索引的方法

# 将columns中的其中两列:race和sex的值设置索引,race为一级,sex为二级
# inplace=True 在原数据集上修改的
adult.set_index(['race','sex'], inplace = True) 

# 默认情况下,设置成索引的列会从DataFrame中移除
# drop=False将其保留下来
adult.set_index(['race','sex'], inplace = True)

reset_index()

将使用set_index()打造的层次化逆向操作

既是取消层次化索引,将索引变回列,并补上最常规的数字索引

df.reset_index()

数据选取

[]

只能对行进 行(row/index) 切片,前闭后开df[0:3],df[:4],df[4:]

where 布尔查找

df[df["A"]>7]

isin

# 返回布尔值
s.isin([1,2,3])
df['A'].isin([1,2,3])
df.loc[df['A'].isin([5.8,5.1])]选取列A中值为5.8,5.1的所有行组成dataframe

query

多个where整合切片,&:于,|:或 

df.query(" A>5.0 & (B>3.5 | C<1.0) ") 

loc :根据名称Label切片

# df.loc[A,B] A是行范围,B是列范围
df.loc[1:4,['petal_length','petal_width']]

# 需求1:创建一个新的变量 test
# 如果sepal_length > 3 test = 1 否则 test = 0
df.loc[df['sepal_length'] > 6, 'test'] = 1
df.loc[df['sepal_length'] <=6, 'test'] = 0

# 需求2:创建一个新变量test2 
# 1.petal_length>2 and petal_width>0.3 = 1 
# 2.sepeal_length>6 and sepal_width>3 = 2 3.其他 = 0
df['test2'] = 0
df.loc[(df['petal_length']>2)&(df['petal_width']>0.3), 'test2'] = 1
df.loc[(df['sepal_length']>6)&(df['sepal_width']>3), 'test2'] = 2

iloc:切位置

df.iloc[1:4,:]

ix:混切

名称和位置混切,但效率低,少用

df1.ix[0:3,['sepal_length','petal_width']]

map与lambda

alist = [1,2,3,4]
map(lambda s : s+1, alist)#map就是将自定义函数应用于Series每个元素

df['sepal_length'].map(lambda s:s*2+1)[0:3]

apply和applymap

apply和applymap是对dataframe的操作,前者操作一行或者一列,后者操作每个元素

These are techniques to apply function to element, column or dataframe.

Map: It iterates over each element of a series. 
df[‘column1'].map(lambda x: 10+x), this will add 10 to each element of column1.
df[‘column2'].map(lambda x: ‘AV'+x), this will concatenate “AV“ at the beginning of each element of column2 (column format is string).

Apply: As the name suggests, applies a function along any axis of the DataFrame.
df[[‘column1','column2']].apply(sum), it will returns the sum of all the values of column1 and column2.
df0[['data1']].apply(lambda s:s+1)

ApplyMap: 对dataframe的每一个元素施加一个函数
func = lambda x: x+2
df.applymap(func), dataframe每个元素加2 (所有列必须数字类型)

contains

# 使用DataFrame模糊筛选数据(类似SQL中的LIKE)
# 使用正则表达式进行模糊匹配,*匹配0或无限次,?匹配0或1次
df_obj[df_obj['套餐'].str.contains(r'.*?语音CDMA.*')] 

# 下面两句效果一致
df[df['商品名称'].str.contains("四件套")]
df[df['商品名称'].str.contains(r".*四件套.*")]

以上这篇pandas数据清洗,排序,索引设置,数据选取方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python读写Excel文件方法介绍
Nov 22 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
利用nohup来开启python文件的方法
Jan 14 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
python函数修饰符@的使用方法解析
Sep 02 Python
新手学习Python2和Python3中print不同的用法
Jun 09 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 Python
对pandas replace函数的使用方法小结
May 18 #Python
基于DataFrame筛选数据与loc的用法详解
May 18 #Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 #Python
pandas.loc 选取指定列进行操作的实例
May 18 #Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 #Python
解决pycharm无法调用pip安装的包问题
May 18 #Python
解决已经安装requests,却依然提示No module named requests问题
May 18 #Python
You might like
php 变量未定义等错误的解决方法
2011/01/12 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
浅谈Node异步编程的机制
2017/10/18 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
js中的闭包实例展示
2018/11/01 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
PyQt5每天必学之进度条效果
2018/04/19 Python
python多线程同步之文件读写控制
2021/02/25 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
优秀员工年终发言演讲稿
2014/01/01 职场文书
买房协议书
2014/04/11 职场文书
银行求职自荐书
2014/06/25 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
租房协议书
2014/09/12 职场文书
2015年助残日活动总结
2015/03/27 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
Django与数据库交互的实现
2021/06/03 Python
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
无线电知识基础入门篇
2022/02/18 无线电