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中变量交换的例子
Aug 25 Python
Python随机生成带特殊字符的密码
Mar 02 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
python list转置和前后反转的例子
Aug 26 Python
python进程间通信Queue工作过程详解
Nov 01 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
python使用smtplib模块发送邮件
Dec 17 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 反向排序和随机排序代码
2010/06/30 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
SelecT下拉框选中和取值的解决方法
2016/11/22 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python判断文本中消息重复次数的方法
2016/04/27 Python
python读取和保存视频文件
2018/04/16 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
浅析Python3 pip换源问题
2020/01/06 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
CSS3实现swap交换动画
2016/01/19 HTML / CSS
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
小学音乐教学反思
2014/02/05 职场文书
合伙协议书范本
2014/04/21 职场文书
2015年教师党员公开承诺书
2015/01/22 职场文书
担保贷款承诺书
2015/04/30 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
被告答辩状范文
2015/05/22 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书