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使用urlparse分析网址中域名的方法
Apr 15 Python
介绍Python中的__future__模块
Apr 27 Python
python制作爬虫并将抓取结果保存到excel中
Apr 06 Python
django静态文件加载的方法
May 20 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 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实现简单计算器小程序
2020/08/28 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
python远程连接MySQL数据库
2019/04/19 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
高性能装备提升营地:Kammok
2019/02/27 全球购物
20岁生日感言
2014/01/13 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
超市开店计划书
2014/09/15 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
市级三好生竞选稿
2015/11/21 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers