Python处理重复、缺失值

Python处理重复、缺失值

使用Python处理数据的重复、缺失值

1 导入模块

先导入一些常用的模块

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 魔法函数:内嵌绘图,不需要show()就可以显示图片
%matplotlib inline 
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

2 数据加载

# 读取数据
data_raw=pd.read_excel('./data/crx_dataV1.xls')
# 保存
# data.to_excel('./data.xls',index=False)

3 查看数据的基本信息

# 查看数据基本信息
print('查看数据基本信息:')
print('shape:',data_raw.shape)
print('\n头部5行: \n\n',data_raw.head())
print('\n尾部5行: \n\n',data_raw.tail())
print('\n各个属性的摘要:\n',data_raw.describe())
image-20221016183118267 image-20221016183141015
# for col in data_raw.columns:
#     print(col,' value_counts():')
#     print(data_raw[col].value_counts())

# 统计某一列各种值的数量
# 以A1列为例
data_raw['A1'].value_counts()
image-20221016183232810

value_counts()也是可以用来查看重复行的

ref: (9个value_counts()的小技巧,提高Pandas 改进数据分析效率_deephub的博客-CSDN博客_value_count()

# 查看重复的行
data_raw.value_counts()
image-20221016183419635

4 处理重复值

duplicatedFlag = data_raw.duplicated(keep=False) # 重复的行,均标记为True,例如,若行2,4,6是重复的,则全部标记为True
booleanIdx = duplicatedFlag.to_numpy()
print('\n去重之前,有重复的数据:\n',data_raw[booleanIdx])

data=data_raw.drop_duplicates() # 去除重复行

# 检查一下,看看是不是真的删掉了重复行
duplicatedFlag = data.duplicated(keep=False) # 重复的行,均标记为True,例如,若行2,4,6是重复的,则全部标记为True
booleanIdx = duplicatedFlag.to_numpy()
print('\n去重之后,无重复的数据:\n',data[booleanIdx])
image-20221016183721663 image-20221016183808267

5 处理缺失值

crx_dataV1.xls中的缺失值是用?代替的,所以要先将?替换为NaN,然后再进行处理。

ref: Python Pandas DataFrame.isin()用法及代码示例 - 纯净天空 (vimsky.com)

# 数据中的缺失值用?表示,所以需要查找?
# 先用isin() 将?标记为True,其余标记为False
# 再用sum() 分别对每一列求和即可求出没一列中?的数量
miss_count=data.isin(['?']).sum() 
miss_count
# 显然数据中是存在缺失值的(A1列有12个缺失值,A14列有13个缺失值)
image-20221016184247267

显然数据中是有缺失值的。

# 以A1为例,输出A1中有缺失值的行
data[data['A1'].isin(['?'])]
image-20221016184456483

ref:

pandas.DataFrame.replace — pandas 1.5.0 documentation (pydata.org)

(cnblogs.com)

缺失值处理python实现_Audrey_Meng的博客-CSDN博客

# 将缺失值替换为pandas可以处理的值(np.nan)
data=data.replace("?",np.nan) # 将?替换为nan,
# 和上面的统计?数量类似
# 统计nan的数量
data.isnull().sum()
image-20221016184746728

接下来将缺失值替换,有多种替换方式,可以直接删除、也可以用前一个值填充…

ref: fillna()函数详解_Denver_Liao的博客-CSDN博客_.fillna

# data.dropna() # 删除有nan的行,inplace=True才会在原表上操作
data.fillna(method='ffill',inplace=True) # 用前一个值填充nan

数据、源码可以在github仓库获取:LZYLIAO/DATA_MINING (github.com)

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值