在pandas
数据分析库中,read_csv()
函数用于读取以逗号分隔的(csv)文件格式。在处理CSV文件时我们经常会遇到缺失值这个问题,下面是pandas
中read_csv
的缺失值处理方式的完整攻略。
1. 缺失值的类型
pandas
中的缺失值分为两种类型:
NaN
:表示缺失数值的特殊浮点数,即“Not a Number”。None
:表示缺失值的Python对象。
2. 参数说明
read_csv()
函数的主要参数如下:
filepath_or_buffer
:CSV文件的路径或文件对象。sep
:指定列与列之间的分隔符,默认为逗号(,)。header
:指定数据文件中的哪一行作为列名,默认为0,即第一行作为列名。index_col
:指定数据文件中的哪一列作为索引列。usecols
:选择需要读取的列。na_values
:指定哪些值应该被识别为缺失值。
3. 缺失值的处理方式
在pandas
中,可以使用以下方法处理缺失值:
3.1. 默认处理方式
当数据文件中存在缺失值时,read_csv()
函数默认将缺失值识别为NaN
,对于NaN
值,有pandas
默认的处理方式:
import pandas as pd
df = pd.read_csv("data.csv")
print(df.isnull().sum())
上述代码中的isnull()
函数将返回一个布尔类型的数据框,值为True
的表示缺失值,False
表示不是缺失值;再调用sum()
函数进行求和操作即可在终端中输出数据集中每个列的缺失值总数。
3.2. 自定义处理方式
除了使用默认的方式外,pandas
中提供了若干种自定义处理缺失值的方式:
3.2.1. 删除缺失值
当数据文件中有过多的缺失值时,可以使用dropna()
函数删除行或列。
import pandas as pd
df = pd.read_csv("data.csv")
# 删除含有缺失值的行,默认删除含有任何缺失值的行
df.dropna()
# 删除含有缺失值的列,默认删除含有任何缺失值的列
df.dropna(axis = 1)
3.2.2. 填充缺失值
当数据分析中存在缺失值时,我们可以使用fillna()
函数将缺失值填充为其他的数值。
import pandas as pd
df = pd.read_csv("data.csv")
# 将缺失值填充为0
df.fillna(0)
# 将缺失值填充为均值
df.fillna(df.mean())
# 将缺失值填充为中位数
df.fillna(df.median())
上述代码中的fillna()
函数分别将缺失值填充为了0、均值以及中位数。
4. 示例说明
为了更好的理解read_csv
的缺失值处理方式,以下提供两个示例说明。
4.1. 示例1
假设我们有以下的数据文件data.csv
:
year,sex,population
2019,M,2404
2019,F,2414
2018,M,2241
2018,F,2277
2017,M,2106
2016,F,2181
2015,M,2033
2014,F,2120
这个文件中没有缺失值,代码如下:
import pandas as pd
df = pd.read_csv("data.csv")
print(df.isnull().sum())
输出结果为:
year 0
sex 0
population 0
dtype: int64
由于数据文件中不存在缺失值,所以输出结果中三列对应的值都为0。
4.2. 示例2
继续以data.csv
文件为例,现在将其中一个数据设为缺失值,修改后文件如下:
year,sex,population
2019,M,2404
2019,F,2414
2018,M,2241
2018,F,2277
2017,M,2106
2016,F,
2015,M,2033
2014,F,2120
现在,对于缺失值,我们采用均值填充的方法进行处理,代码如下:
import pandas as pd
df = pd.read_csv("data.csv")
# 将缺失值填充为均值
df.fillna(df.mean(), inplace=True)
print(df.isnull().sum())
输出结果为:
year 0
sex 0
population 0
dtype: int64
由于缺失值已经被填充了均值,所以输出结果中三列对应的值都为0。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas中read_csv的缺失值处理方式 - Python技术站