Pandas数据处理

Pandas缺失值处理

文章目录

    • Pandas缺失值处理
      • 1.缺失值处理
      • 2.填充思路
      • 3.缺失值分析
        • 3.1 加载数据
        • 3.2 计算每一列非空的个数
        • 3.3 计算每列缺失值的比例
        • 3.4缺失值个数与缺失值比例合并
        • 3.5 具体缺失数据统计代码
        • 3.6 missingno库分析可视化缺失值
      • 4 缺失值删除
        • (1)按行删除
        • (2)dropna函数的参数
        • (3)按列删除:当一列包含了很多缺失值时(如超过80%)
      • 5.缺失值填充
        • 5.1 非时间序列
        • 5.2 时间序列
        • (1)前项填充
        • (2)后项填充(behind fill)
        • (3)线性填充

1.缺失值处理

​ 1.加载数据时,设置na_value参数,指定加载数据把什么当作缺失值

pd.read_csv('survey_visited.csv',na_values=[619])

Pandas数据处理_第1张图片

2.填充思路

非时间序列可以通过常量与数据统计(如中位数等)

时间序列可以前向填充、后向填充、线性填充

高级方法:KNN MICE

3.缺失值分析

  • 本案例使用泰坦尼克生存预测数据,survived字段,代表乘客是否获救
3.1 加载数据

Pandas数据处理_第2张图片

info()可查询一列中有多少非空的数据

Pandas数据处理_第3张图片
3.2 计算每一列非空的个数
train.isnull()

可将非缺失数值变为true,其他变为false=1

Pandas数据处理_第4张图片

再每一列计算和,就可以统计出缺失值的个数

train.isnull().sum()
Pandas数据处理_第5张图片
3.3 计算每列缺失值的比例
mis_val=train.isnull().sum()
# 计算每列缺失值的比例
mis_val/len(train)*100
Pandas数据处理_第6张图片
3.4缺失值个数与缺失值比例合并
mis_val_table = pd.concat([mis_val,a],axis=1)
mis_val_table.columns = ['缺失值个数','占比{%}']
mis_val_table
Pandas数据处理_第7张图片
3.5 具体缺失数据统计代码

Pandas数据处理_第8张图片

3.6 missingno库分析可视化缺失值
missingno.bar(train)
Pandas数据处理_第9张图片
missingno.matrix(train)  ##位置分布
Pandas数据处理_第10张图片
missingno.heatmap(train)  #确实列之间的相关性
Pandas数据处理_第11张图片

Pandas数据处理_第12张图片

缺失的关联程度

4 缺失值删除

(1)按行删除
# 按行删除
train_cp = train.copy() # copy一份
#只要age列有缺失值,就把整个行删除,inplace表示在原资料上操作
train_cp.dropna(subset=['Age'],how='any',inplace=True) 
print(train_cp['Age'].isnull().sum())
#通过miss库查看效果
missingno.bar(train_cp)
Pandas数据处理_第13张图片
(2)dropna函数的参数

Pandas数据处理_第14张图片

(3)按列删除:当一列包含了很多缺失值时(如超过80%)
train_cp.drop(['Age',axis=1],inplace= True)

5.缺失值填充

5.1 非时间序列

(1)使用常量填充

train.fillna(0,inplace=True) #所有缺失值都变为0

(2)使用统计量(缺失值所处列的平均值、中位数和众数)

#统计量填充
train_cp = train.copy()
train_cp
age_av = train_cp['Age'].mean()
train_cp['Age'].fillna(age_av,inplace=True)
train_cp.isnull().sum()
5.2 时间序列
  • 本案例使用city_day.csv,首先加载数据

    pd.read_csv('city_day.csv',parse_dates=True)
    city_day
    city_day = city_day.set_index('Date')
    

    parse_dates参数是将数值设置为时间类型

(1)前项填充

​ 方便观看,只截取一部分内容

city_day['Xylene'][50:64]
Pandas数据处理_第15张图片
  • 使用ffill方法(front fill)
city_day.fillna(method='ffill',inplace=True)
Pandas数据处理_第16张图片
(2)后项填充(behind fill)
city_day.fillna(method='bfill',inplace=True)
(3)线性填充
city_day['Xylene'][50:64]
city_day.interpolate(limit_direction='both',inplace=True)
city_day['Xylene'][50:64]

你可能感兴趣的:(pandas)