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中的包和模块实例
Nov 22 Python
详解Django中的过滤器
Jul 16 Python
关于Django外键赋值问题详解
Aug 13 Python
Python之批量创建文件的实例讲解
May 10 Python
python给微信好友定时推送消息的示例
Feb 20 Python
在python中做正态性检验示例
Dec 09 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
python中操作文件的模块的方法总结
Feb 04 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
Feb 20 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
PHP中的类-什么叫类
2006/11/20 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP缓冲区用法总结
2016/02/14 PHP
jquery text()要注意啦
2009/10/30 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
纯JS实现轮播图
2017/02/22 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
Python出现segfault错误解决方法
2016/04/16 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
用python实现百度翻译的示例代码
2018/03/09 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
python破解同事的压缩包密码
2020/10/14 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
工程造价专业大专生求职信
2013/10/06 职场文书
怎么样写好简历中的自我评价
2013/10/25 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
财务负责人任命书
2014/06/06 职场文书
会议接待欢迎标语
2014/10/08 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
运动会运动员赞词
2015/07/22 职场文书