缺失值选择思想和处理缺失值

缺失值选择思想和处理缺失值

  • 读取数据集
import pandas as pd
from config import file
data = pd.read_csv(file, encoding='gbk')
  • 按列统计各列缺失值的个数
num=data.isna().sum()
print(num)
部分列如下所示:
Unnamed: 0                                  0
custid                                      0
trade_no                                    0
bank_card_no                                0
low_volume_percent                          2
middle_volume_percent                       2
take_amount_in_later_12_month_highest       0
trans_amount_increase_rate_lately           3
trans_activity_month                        2
trans_activity_day                          2
transd_mcc                                  2
trans_days_interval_filter                  8
trans_days_interval                         2
regional_mobility                           2
student_feature                          2998
  • 查看对应有缺失值的数据分布情况
def data_columns(column):
 '查看某一列值的分布情况'
 result = data[column]
 print(result.describe())
  • 填充缺失值
    缺失值填充的思想是选择用中位数或者均值去填充,如果看到中位数值和均值相差不多,此时选择均值比较好。如果中位数和均值相差较多,此时选择中位数比较好,因为中位数比较稳定,不会受到数值偏离的影响。
def fill_median(column):
 '用中位数填充'
 data[column].fillna(data[column].median(), inplace=True)
 def fill_mean(column):
 '用均值填充'
 data[column].fillna(data[column].mean(), inplace=True)
  • 分析
  • 1 选择用中位数填充
    例如:
data_columns('trans_days_interval')
'''
count    4752.000000
mean       21.751263
std        16.474916
min         4.000000
25%        12.000000
50%        17.000000
75%        27.000000
max       234.000000
Name: trans_days_interval, dtype: float64
'''
fill_median('trans_days_interval')

其中均值比中位数大的较多些,此时选择用中位数填充。

  • 2 选择用均值填充
data_columns('transd_mcc')
'''
count    4752.000000
mean       17.502946
std         4.475616
min         2.000000
25%        15.000000
50%        17.000000
75%        20.000000
max        42.000000
Name: transd_mcc, dtype: float64
'''
fill_median('transd_mcc')

其中均值和中位数差不多大,分布比较均匀,选择用均值填充缺失值

  • 问题
  • 1 发现一列数据中小的值数量相对大的值的数量少的多,此时对于数据应该如何处理
  • 2 最小数特别小,而最大数特别大,且均值又偏小,肯定存在异常值,没有找到异常值的替换方法
'''
count     4751.000000
mean        14.160674
std        694.180473
min          0.000000
25%          0.615000
50%          0.970000
75%          1.600000
max      47596.740000
Name: trans_amount_increase_rate_lately, dtype: float64
'''
其中最小值为0,最大值为 47596.74,里面肯定有离群值,没有及时找到离群值的填充方法
  • 3 因为不清楚student_feature的特征,其中1的个数1754,2的个数2,2998个缺失值,没有填写缺失值。
  • 4 latest_query_time里面的格式为时间,缺少的值不清楚是否可以根据频率最多的来填,其中频率最多的是2018-04-14。
'''
count           4450
unique           207
top       2018-04-14
freq             423
Name: latest_query_time, dtype: object
'''
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值