当前位置: 首页>数据库>正文

python dataframe 数据整合 python处理dataframe数据

系列文章目录

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



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

  • 系列文章目录
  • 前言
  • 一、今天所学的内容
  • 二、知识点详解
  • 2.1 删除行
  • 2.1.1 按==标签==来删除列
  • 2.1.2 按==序号==来删除列
  • 2.2 空值处理
  • 2.3 去重
  • 总结



前言

昨天我们学习了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 dataframe 数据整合 python处理dataframe数据,python dataframe 数据整合 python处理dataframe数据_数据处理,第1张

值得注意的是,虽然我们指定的列名中有“职业”这一条,但我们所传入的数据中并没有关于“职业”的信息,因此这一列的数据全都为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的值,则为:

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))

结果如下截图所示:

可以看出,这两种方法在删除列的结果上没有差别。

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

2.2 空值处理

将值为null的数据填为0:

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

结果如下:

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)

代码运行结果:

现在对数据进行去重前的判断:

print(df2.duplicated()) #判断每一行是否相对于之前的行重复

运行结果显示:

判断出第五行相对于之前的行重复,因此数据进行去重操作:

df2.drop_duplicates() #删除所有重复行
print(df2)

运行结果显示:

是哪里出了问题呢?

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

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

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

df2.drop_duplicates(inplace=True) #判断每一行是否相对于之前的行重复
print(df2)

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

或者直接输出去重结果,不要求在原DataFrame上保留结果:

print(df2.drop_duplicates())

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

总结

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

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

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

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

今天的小tips:

  • 学习没有捷径。



https://www.xamrdz.com/database/6n81951343.html

相关文章: