系列文章目录
第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的内容:
值得注意的是,虽然我们指定的列名中有“职业”这一条,但我们所传入的数据中并没有关于“职业”的信息,因此这一列的数据全都为NaN(Not a Number)。
然后我们来看我们对 DataFrame 的一些常用的处理方法。
2.1 删除行
现在我们要想删除data里的"职业”一列,这里主要介绍两种删除列的方法:
- 按标签来删除列
- 按序号来删除列
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:
- 学习没有捷径。