【玩转pandas系列】数据清洗(文末送书)

这篇具有很好参考价值的文章主要介绍了【玩转pandas系列】数据清洗(文末送书)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python


本文介绍在数据分析中如何使用 pandas 进行数据清洗,是 pandas 学习阶段的 重点,没有之一。

一、重复值检测

pandas中用于重复值检测的是 duplicated() 函数,可以用于检测行或列是否前后重复,返回值是 bool 类型。True 表示重复,False 表示不重复。

函数参数:

  • keep:默认情况下 keep = first ,表示第一行不重复,后面的行参照第一行,取值还有 last(认为最后一行不重复),False(标记所有重复行)。

  • subset:只检测某些列是否重复,值是一个列表。

首先导入必要的包,并定义一个用于构建 dataframe 对象的函数:

import numpy as np
import pandas as pd
# 定义生成 dataframe 对象的函数
def make_df(indexs,columns):
    data = [[str(j)+str(i) for j in columns] for i in indexs]
    df = pd.DataFrame(data=data,index=indexs,columns=columns)
    return df
df = make_df(list('123'),list('ABC'))
df

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

下面演示 duplicated() 函数以及参数的使用:

# 让第一行和第二行一样
df.loc['1'] = df.loc['2']
df

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

df.duplicated()

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
等价写法:

df.duplicated(keep='first')

以最后一行为不重复参照:

df.duplicated(keep='last')

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
标记所有重复行:

df.duplicated(keep=False)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
只检查 B、C 列:

df.duplicated(subset=['B','C'])

二、元素替换

1️⃣ 元素替换replace

replace 函数用于替换单个的元素。

首先构建 dataframe 对象:(本文后面用到的 dataframe 对象都是这个,只是数据是随机产生的,和我的肯定不同,但是不重要)

index = ['张三','张三丰','李白','杜甫']
columns = ['Python','Java','H5','UI']
data = np.random.randint(0,100,(4,4))
df = pd.DataFrame(data=data,index=index,columns=columns)
df

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
将1、11分别改为60,61:

df.replace({1:60,11:61})

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

2️⃣ 数据映射map

map 一般用于 Series 结构,不能用于 dataframe ,因此,我们在使用 map 来处理 dataframe 对象时,应该取一个 Series (列)。

如果对 dataframe 对象使用 map 函数(不是下面的第一种情况):

df.map(lambda x:'及格' if x >= 60 else '不及格')

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
如果对 Series 对象使用 map 函数(下面的2、3种情况):

df['Python'].map(lambda x:'及格' if x >= 60 else '不及格')

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

  • 1.直接使用 map

现在将上面的4、18分别改为44,81:

df.map({4:44,18:81})

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

  • 2.使用 lambda 表达式

现在使用 lambda 表达式筛选 Python 成绩,分为及格和不及格。

df['Python'].map(lambda x:'及格' if x >= 60 else '不及格')
  • 3.使用普通函数

使用普通函数,即为 map 函数传递一个函数名:

# 使用普通函数
def fn(x):
    if x >= 60:
        return '及格'
    return '不及格'
df['UI'].map(fn)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

三、修改索引

1️⃣ 修改索引名rename

使用 pd.rename() 函数可以修改索引,默认是修改行索引,传递字典。

使用 rename 函数修改行索引:

df.rename({'张三':'ZhangSan'})

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

如果要修改列索引,要使用 axis = 1 指定:

df.rename({'Python':'派森'},axis=1)

或者使用 columns 参数:

df.rename(columns={'Java':'爪哇'})

结果如下:
【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

修改行索引还是修改列索引,可以通过 axis 控制,也可以使用 index 、 columns 参数控制。

2️⃣ 设置索引和重置索引

pandas中 set_index() 函数用于将 keys 参数中指定的列索引变为行索引。

接下来使用 set_index() 修改列索引 Python 为行索引:

df.set_index(keys=['Python'])

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

函数参数:

  • keys:列表类型,用于指定要更改的列。

  • drop:bool 类型,默认为True,表示列改为行索引后,删除原来的列。

  • append:bool 列行,默认为False,表示不追加,删除原来的行索引。

重置行索引使用 reset_index 函数,重置列索引使用的是 df.columns 重新赋值。

分别重置行索引和列索引:
【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

df.columns = ['1','2','3','4'] 
df

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

四、数据处理

apply、applymap、transform 都是用于数据处理的函数,其中 applymap 只适用于处理 dataframe ,apply 和 transform 适用于处理 Series 和 DataFrame 。

1️⃣ apply与applymap

apply 应用于Series:

df['Python'].apply(lambda x: True if x > 60 else False)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

apply 应用于DataFrame(求每一列的平均值):

df.apply(lambda x:x.mean())

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
也可以传递一个函数,并控制计算行或列:

def fn(x):
    return (x.mean(),x.count())
df.apply(fn,axis=1)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
applymap 处理 dataframe :

# 处理Series报错
df['Python'].applymap(lambda x:x*10)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

# 处理dataframe不报错
df.applymap(lambda x:x*10)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

2️⃣ transform

transform 处理 Series(计算Python列的平方根):

df['Python'].transform(np.sort)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

transform 处理 DataFrame(平均值大于6就除以6):

def fn(x):
    if x.mean() > 6:
        return x / 6
    return x
df.transform(fn)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

五、异常值处理

这部分的内容,主要介绍8个常用函数的用法,为了防止图片过多,部分实际运行结果已省略。

  • describe()

describe函数用于查看 dataframe 对象的列数,平均值,标准差,最小值、最大值、平均值等。

# 构建dataframe对象
data = np.random.randint(0,10,(5,3))
df = pd.DataFrame(columns=['NumPy','Pandas','Pytorch'],data=data)
df

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

df.describe()

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
查看更细致的百分位数,并且转置:

df.describe([0.01,0.33,0.99]).T

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

  • info()、std()

info 函数用于查看数据类型、行列索引、每一列数据非空情况、类型、内存使用情况等。
std() 函数用于求每一列的标准差。

df.info()
df.std()
  • drop()

drop 函数用于删除索引。可以通过 axis 或者 index / columns 控制删除行索引还是列索引。

df2.drop(0) # 默认删除行
df2.drop(index=0) # 等价写法
df2.drop('NumPy',axis=1) # 删除列
df2.drop(columns='NumPy') # 等价写法
df2.drop(columns=['NumPy','Pandas']) # 删除多列
df2.drop(columns='NumPy',inplace=True) # 修改原数据
  • unique()

unique 函数用于去重,只能应用于 Series 对象,不能用于 DataFrame 对象。

df['Pytorch'].unique()
  • query()

query 函数用于查询特定的行。

df.query('Pandas == 6') # 查询pandas = 6的行
df.query('Pytorch > 2') # 查询Pytorch > 2的行
df.query('Pandas == 6 and Pytorch > 2' ) # 使用 and 符
n = 3
df.query('Pytorch > @n') # 使用变量
  • sort_values()

sort_values 函数作用是根据值对行或列进行排序。

df.sort_values('Pandas') # 默认列排序
df.sort_values('Pandas',ascending=False) # 降序
df.sort_values(0,axis=1) # 行排序
  • sort_index()

sort_index 函数用于对索引排序,数字按大小,非数字按 ASCII 码。

df.sort_index() # 默认对行索引排序(axis = 0),并且是升序(ascending = True)
df.sort_index(ascending=False) # 降序
df.sort_index(axis = 1,ascending=False) # 对列索引排序,并且降序

六、抽样聚合函数

1️⃣ 抽样

pandas 中有两种抽样,分别是有放回抽样(可能重复)和无放回抽样(不会重复),使用 take 函数抽取,下面使用代码表示。

首先查看 dataframe 对象:
【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

  • 无放回抽样
df.take([0,2,3,1,4]) # 交换行

运行结果分别是:
【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

df.take([0,2,1],axis=1) # 交换列

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

df.take(np.random.permutation([0,1,2,3,4])) # 随机交换

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

  • 有放回抽样
df.take(np.random.randint(0,4,size=5))

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

2️⃣ 数学函数

这里罗列出了一些常用的数学函数,不再以代码演示。

函数名 功能
count 非空值数量
max / min 最大 / 小值
median / mean 中位数 / 平均数
sum
value_counts 元素出现次数
cumsum 累加
cumprod 累乘
std 标准差
var 方差
cov 协方差
corr 相关系数

七、分组聚合

分组操作通过 groupby() 方法实现,得到的是一个 DataFrameGroupBy 对象,该对象与 DataFrame 类似,操作和 DataFrame 一样即可。

下面结合例题讲解 groupby 方法。

有如下 dataframe 对象:

df = pd.DataFrame(
    data={
        'item':['萝卜','白菜','辣椒','冬瓜','白菜','辣椒','萝卜','萝卜'],
        'color':['白色','青色','红色','白色','白色','青色','红色','青色'],
        'weight':[1,0,3,4,5,2,12,3],
        'price':[0.99,1.5,2,5,4,2,9,2]
    }
)
df

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

  • 1.求出颜色为白色的价格总和
# 要得到颜色为白色的所有行,首先要按照颜色进行分组,通过 by 参数指定
df.groupby(by='color')
# 接下来取出价格列(Series类型)
df.groupby(by='color')['price']
# 进行求和
df.groupby(by='color')['price'].sum()
# 最后取出白色
df.groupby(by='color')['price'].sum()['白色']
  • 2.分别求出萝卜的总重量和平均价格
# (1)
# 首先按照item分类
df.groupby('item')
# 然后取出重量
df.groupby('item')['weight']
# 求和
df.groupby('item')['weight'].sum()
# 再取出萝卜
df.groupby('item')['weight'].sum()['萝卜']
#(2)
# 类似的,得到平均价格
df.groupby('item')['price'].mean()['萝卜']
  • 3.使用 merge 合并总重量和平均价格

因为上述取出 weightprice 后是 Series 对象,我们要稍作改变为 DataFrame 对象,才能使用 merge 进行合并。

df1 = df.groupby('item')[['weight']].sum()
df2 = df.groupby('item')[['price']].mean()
display(df1,df2)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python
【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

# 因为两个 df 对象没有相同列,合并时要使用 left / right_index
df1.merge(df2,left_index=True,right_index=True)

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

🎁 文末福利

本期送出《Python机器学习:基于PyTorch和Scikit-Learn》。
【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python

本书是一本全面介绍在PyTorch环境下学习机器学习和深度学习的综合指南,可以作为初学者的入门教程,也可以作为读者开发机器学习项目时的参考书。

本书讲解清晰、示例生动,深入介绍了机器学习方法的基础知识,不仅提供了构建机器学习模型的说明,而且提供了构建机器学习模型和解决实际问题的基本准则。本书添加了基于PyTorch的深度学习内容,介绍了新版Scikit-Learn。本书涵盖了多种用于文本和图像分类的机器学习与深度学习方法,介绍了用于生成新数据的生成对抗网络(GAN)和用于训练智能体的强化学习。最后,本书还介绍了深度学习的新动态,包括图神经网络和用于自然语言处理(NLP)的大型transformer。无论是机器学习入门新手,还是计划跟踪机器学习进展的研发人员,都可以将本书作为使用Python进行机器学习的不二之选。

学完本书,你将能够:

  • 探索机器从数据中“学习”的框架、模型和方法。

  • 使用Scikit-Learn实现机器学习,使用PyTorch实现深度学习。

  • 训练机器学习分类器分类图像、文本等数据。

  • 构建和训练神经网络、transformer及图神经网络。

  • 探索评估和优化模型的最佳方法。

  • 使用回归分析预测连续目标结果。

  • 使用情感分析深入地挖掘文本和社交媒体数据。

✳️ 点这里去往:购买链接

🎁 本次送书1~5本【阅读量越多,送的越多】

⌛️ 活动时间:截止到2023-08-8 10:00

✳️ 参与方式: 关注博主+三连(点赞、收藏、评论)(切记要点赞+收藏,否则抽奖无效)

🏆 抽奖方式: 评论区随机抽取小伙伴免费送出!!

【玩转pandas系列】数据清洗(文末送书),Python数据分析,pandas,机器学习,python文章来源地址https://www.toymoban.com/news/detail-623573.html

到了这里,关于【玩转pandas系列】数据清洗(文末送书)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python】一文了解Python爬虫 | 文末送书

    目录 引言 1. 爬虫基础知识 1.1 什么是爬虫 1.2 HTTP协议 1.2.1 HTTP请求方法 1.GET请求 1.2.2 请求头常见字段 1.2.3 响应状态码 1.3 HTML解析 1.3.1 Beautiful Soup        解析库 1.3.2 XPath         xpath解析原理:           xpath 表达式 2. 爬虫进阶技巧 2.1 防止被反爬虫 2.1.1 User-Agent伪

    2024年02月13日
    浏览(49)
  • AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀【文末送书-38】

    在当今数字化和信息化的时代,金融行业正处于巨大的变革之中。随着人工智能(AI)和大数据技术的迅猛发展,金融机构对于数据的处理和分析变得愈发重要。Python作为一种强大的编程语言,以其简洁、灵活、易学的特点,成为了金融数据分析的首选工具之一。而结合AI技术

    2024年03月16日
    浏览(66)
  • 【文末送书】Python OpenCV从入门到精通

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。它由一组用C++编写的函数和工具组成,同时也支持多种编程语言,如Python、Java等。 OpenCV的主要特点包括: 跨平台性:OpenCV可以在多个操作系统上运行,包括Windows、

    2024年02月05日
    浏览(44)
  • 【Python基础】- for/while循环语句(文末送书)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 Python循环语句 while循环 无限循环 while 循环使用 else 语句 for 循环 range对象 列表推导

    2024年02月08日
    浏览(58)
  • Python是什么?有什么用?怎么入门?(文末送书)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+         Python是当今世界最流行的程序语言之一。由荷兰人,吉多·范罗苏姆(Guido v

    2023年04月15日
    浏览(44)
  • 【Python】机器学习-K-近邻(KNN)算法【文末送书】

             目录 一 . K-近邻算法(KNN)概述  二、KNN算法实现 三、 MATLAB实现 四、 实战         K-近邻算法(KNN)是一种基本的分类算法,它通过计算数据点之间的距离来进行分类。在KNN算法中,当我们需要对一个未知数据点进行分类时,它会与训练集中的各个数据点进

    2024年02月08日
    浏览(46)
  • 浅谈 Python 网络爬虫的那些事(文末送书7.0)

    在大数据、人工智能应用越来越普遍的今天,Python 可以说是当下世界上热门、应用广泛的编程语言之一,在人工智能、爬虫、数据分析、游戏、自动化运维等各个方面,无处不见其身影。随着大数据时代的来临,数据的收集与统计占据了重要地位,而数据的收集工作在很大程

    2024年02月08日
    浏览(52)
  • 【文末送书】AI时代数据的重要性

    欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复 “python项目

    2024年02月06日
    浏览(43)
  • 【Python基础】- 自定义函数和匿名函数(文末送书3本)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。   函数能提高

    2024年02月15日
    浏览(43)
  • 数据分析案例-图书书籍数据可视化分析(文末送书)

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.项目背景 2.数据集介绍 3.技术工具 4.导入数据 5.数据可视化 文末推荐与福利     

    2024年01月19日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包