接着前面我们给大家准备好的有问题的天气数据,下面大家讲解如何清理CSV文件中那些空的单元格和数据。


1.删除空白行

想输出一个没有空行的新DataFrame数据,可以使用dropna函数,直接调用即可返回新的没有空白行的数据,例子程序如下:

import pandas as pd

df=pd.read_csv('dotcpp.csv')

new_df=df.dropna()

print(new_df.to_string())

大家可以阅读代码,我这里用了新的变量来接收dropna的返回值,原因是fropna函数默认不更改原数据,如果想直接修改原数据,那么可以给dropna函数带一个参数inplace = True  也就是这么写就行了:

import pandas as pd

df=pd.read_csv('dotcpp.csv')

df.dropna(inplace = True)

print(df.to_string())

这样可以不多定义一个DataFrame变量,更省事


2.替换单元格中的空值

如果想用用指定内容填充CSV文件中的空内容,注意这里的空内容是指NaN、NULL等内容,并不包括空格的内容(空格本身也属于一种内容)

那么可以使用fillna函数来实现,来看个例子:

import pandas as pd

df=pd.read_csv('dotcpp.csv')

df.fillna('ERROR',inplace=True)

print(df.to_string())

我们的代码是将CSV文件中的空字符,改成“ERROR”,并且使用inplace=True参数表示再原来数据上修改(并非是文件本身),然后直接输出,大家可以观察输出效果,原先是NaN以及NULL的数据将会被ERROR代替,笔者这里效果如下:

fillna函数效果

类似的,如果想缩小范围,指定某列上的空值,那么我们可以用字典的key值去指定列,比如代码:

import pandas as pd

df=pd.read_csv('dotcpp.csv')

df['city'].fillna('ERROR',inplace=True)

print(df.to_string())

这段代码意思是我们仅想修改'city'这列上的空值替换,因此可以借助DataFrame的键值去指定,即可实现效果,如下图:

fillna指定列填充效果


3.使用平均值、中位数、众数替换

我们如果即不想删除,也不想用我们预设的内容填充空内容,如果想用该列的平均值、中位数、众数(就是出现次数最多的)也是有现成函数的,分别是:mean()、median()、mode()

我们举个例子,比如我们想对现有所有城市的最高温度(temp_max)这一列用这一列的平均值来填充空内容,则可以这么写:

import pandas as pd

df=pd.read_csv('dotcpp.csv')

t=df['temp_max'].mean()

df['temp_max'].fillna(t,inplace=True)

print(df.to_string())

注意使用这三个函数的前提一定是某一列,这样才能保证数值类型一致,然后我们读取内容后,调用mean()函数计算平均值t,然后将t传入fillna函数即可,效果如下:

利用平均值填充

大家可以看到图中标注有小数位数的就是填充替换后的值,其余两个函数大家可以亲自上机试验~

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)