Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())

系列文章目录

第1天:读入数据
第2天:read()、readline()与readlines()
第3天:进度条(tqdm模块)
第4天:命令行传参(argparse模块)
第5天:读、写json文件(load()、loads()、dump()、dumps())
第6天:os模块、glob模块
第7天:pandas.DataFrame

python数据分析学习第8天记录

前言

昨天我们学习了pandas模块中的DataFrame的一些读取方法并给出了实例。今天继续学习pandas模块下对数据的处理。

一、今天所学的内容

主要内容为pandas模块如何对DataFrame这一数据类型进行将数据输入模型前的与处理工作。

数据处理的主要操作,包括:删除列、空值处理、去重、将值转换为属性/特征、

二、知识点详解

先加载模块:

import pandas

然后我们来创建一个DataFrame:(如果这个地方忘记参数怎么设置,请参考上一篇

df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

首先初始化一个DataFrame,该DataFrame将作为样例,用于下面的讲解:

data = {
        '性别':['male','male','female','male'],
        '姓名':['汤师爷','县长','县长夫人','黄老爷'],
        '年龄':[40,35,25,44]}
df = pd.DataFrame(data,index=['one','two','three','four'],
               columns=['姓名','性别','年龄','职业'])

然后在命令行输入 df ,即可看到当前DataFrame的内容:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())
值得注意的是,虽然我们指定的列名中有”职业”这一条,但我们所传入的数据中并没有关于”职业”的信息,因此这一列的数据全都为NaN(Not a Number)。

然后我们来看我们对 DataFrame 的一些常用的处理方法。

2.1 删除行

现在我们要想删除data里的”职业”一列,这里主要介绍两种删除列的方法:

  1. 按标签来删除列
  2. 按序号来删除列

2.1.1 按标签来删除列

代码如下:

df.drop('职业',axis=1,inplace=False)

其中,inplace=True时,是直接对原dataFrame进行操作;而等于False时则将不改变原来的dataFrame,而将结果生成在一个新的dataFrame中。

所以如果这个时候打印df,则还是原来的数据。此时应该把数据保存在新的DataFrame中:

df_new = df.drop('职业',axis=1,inplace=False)

此时打印df_new的值,则为:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())

2.1.2 按序号来删除列

按照序号来删除列是另一种方法,例如:

x = [1,2]

df.drop(df.columns[x],axis=1,inplace=True)

以上代码表示的含义是,先给出需要删除的列序号的列表,其中第一列可表示为0,第二列表示为1,以此类推。

所以要删除’职业’这一列,只需要加一行代码:

df.drop(df.columns[3],axis=1,inplace=True)

可能不够直观,对比一下上面的方法吧:

print(df.drop('职业',axis=1,inplace=False))
print(df)
print(df.drop(df.columns[3],axis=1,inplace=False))

结果如下截图所示:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())
可以看出,这两种方法在删除列的结果上没有差别。

Tips:
在按序号删除列时,必须要加上axis=1。如果不加的话,就是删除行了。

2.2 空值处理

将值为null的数据填为0:

df.fillna(value=0,axis=1,inplace=True)

结果如下:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())

2.3 去重

去重主要涉及到的方法为:

df.duplicated()
df.drop_duplicates()

举例说明,代码如下:

import pandas
data2 = {
        '性别':['male','male','female','male','male'],
        '姓名':['汤师爷','县长','县长夫人','黄老爷','黄老爷'],
        '年龄':[40,35,25,44,44]}
df2 = pd.DataFrame(data2,index=['one','two','three','four','five'],
               columns=['姓名','性别','年龄','职业'])
print(df2)

代码运行结果:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())
现在对数据进行去重前的判断:
print(df2.duplicated())

运行结果显示:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())
判断出第五行相对于之前的行重复,因此数据进行去重操作:
df2.drop_duplicates()
print(df2)

运行结果显示:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())
是哪里出了问题呢?

回忆今天一开始介绍的内容,inplace这个布尔值在DataFrame的数据操作中尤为重要。

  • 若inplace=True,则表示在原DataFrame上直接修改;
  • 若inplace=False,则表示结果另生成新的DataFrame,原DataFrame没有变化。

因此,要向在原DataFrame上显示出去重效果,代码则应该写成:

df2.drop_duplicates(inplace=True)
print(df2)

现在的运行结果就是我们想要的结果了:

Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())
或者直接输出去重结果,不要求在原DataFrame上保留结果:
print(df2.drop_duplicates())

也会在终端得到相同的结果。但是对原DataFrame是无影响的。选哪种方式去重就看你的需求了。

总结

在昨天对DataFrame初相识的基础上,今天介绍DataFrame的三种数据处理基本操作:删除列、空值处理(又称缺失值处理)以及去重操作。

那么今天就到这里了,明天继续为大家带来DataFrame的数据处理操作。list如下:

  • 将值转换为属性/特征
  • 数据合并,连接(merge,join,concat)
  • 排序、排名
  • 索引重置
  • 追加写入Excel
  • 转化格式(比如dict)进行保存

祝大家变得更强,明天见!

今天的小tips:

  • 学习没有捷径。

Original: https://blog.csdn.net/FANFANHEBAOER/article/details/117458644
Author: 王大梨
Title: Python数据分析【第8天】| DataFrame的三种数据处理基本操作(df.drop(), df.fillna(), df.drop_duplicates())

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/751904/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球