接着前面我们给大家准备好的有问题的天气数据,下面大家讲解如何清理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代替,笔者这里效果如下:

类似的,如果想缩小范围,指定某列上的空值,那么我们可以用字典的key值去指定列,比如代码:
import pandas as pd
df=pd.read_csv('dotcpp.csv')
df['city'].fillna('ERROR',inplace=True)
print(df.to_string())这段代码意思是我们仅想修改'city'这列上的空值替换,因此可以借助DataFrame的键值去指定,即可实现效果,如下图:

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函数即可,效果如下:

大家可以看到图中标注有小数位数的就是填充替换后的值,其余两个函数大家可以亲自上机试验~
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程