缺失值选择思想和处理缺失值
- 读取数据集
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
'''
- 参考文章
https://blog.csdn.net/Mr_HHH/article/details/79488517 python pandas中.isnull().any()含义
https://blog.csdn.net/TH_NUM/article/details/80296254 Pandas 获取列名
https://blog.csdn.net/jingyi130705008/article/details/82670011 缺失值填充的几种方法
https://blog.csdn.net/zhuxiaodong030/article/details/54316345 pandas常用函数
https://blog.csdn.net/Napoleonxxx/article/details/81075329 平均数、中位数、众数 三者的联系与区别
https://blog.csdn.net/sinat_38893241/article/details/80414977 pandas数据框,统计某列或者某行数据元素的个数
https://blog.csdn.net/qq_16234613/article/details/64217337 Python pandas数据分析中常用方法