侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

技术  /  管理员 发布于 7年前   250

此教程适合有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.5df.fillna(method='ffill') #在列方向上以前一个值作为值赋给NaN

值替换replace()

# 将df的A列中 -999 全部替换成空值df['A'].replace(-999, np.nan)#-999和1000 均替换成空值obj.replace([-999,1000], np.nan)# -999替换成空值,1000替换成0obj.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中某个索引值不存在,会自动补上NaNdf2 = df1.reindex(['a','b','c','d','e'])# fill_valuse为原先不存在的索引补上默认值,不在是NaNdf2 = df1.reindex(['a','b','c','d','e'], fill_value=0)# inplace=Ture,在DataFrame上修改数据,而不是返回一个新的DataFramedf1.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 = 0df.loc[df['sepal_length'] > 6, 'test'] = 1df.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.其他 = 0df['test2'] = 0df.loc[(df['petal_length']>2)&(df['petal_width']>0.3), 'test2'] = 1df.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+2df.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数据清洗,排序,索引设置,数据选取方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    pandas中去除指定字符的实例
    下一条:
    对pandas replace函数的使用方法小结
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客