Day4打卡,缺失值的处理

部署运行你感兴趣的模型镜像

@浙大疏锦行

题目:初识pandas库与缺失数据的补全

按照示例代码的要求,去尝试补全信贷数据集中的数值型缺失值

  1. 打开数据(csv文件、excel文件)
  2. 查看数据(尺寸信息、查看列名等方法)
  3. 查看空值
  4. 众数、中位数填补空值
  5. 利用循环补全所有列的空值

完成后在py文件中独立完成一遍,并且利用debugger工具来查看属性(不借助函数显式查看)----养成利用debugger工具的习惯

常见的转义字符

#单引号和双引号在功能上是完全等效的,但在字符串本身包含双引号时,使用单引号可以避免使用转义字符
# \n 换行符;\t 制表符; \" 双引号; \' 单引号; \\ 反斜杠本身

# 方法1: 使用双反斜杠转义
path1 = "C:\\Users\\Desktop\\data.csv"

# 方法2: 使用原始字符串(r前缀)
path2 = r"C:\Users\Desktop\data.csv"

一、打开数据(csv文件、excel文件)

当使用 pd.read_excel() 读取 .xlsx 文件时,pandas 需要 openpyxl 库的支持。记得提前安装

import pandas as pd
data_csv = pd.read_csv(r'data.csv')
#单引号和双引号在功能上是完全等效的,但在字符串本身包含双引号时,使用单引号可以避免使用转义字符
data_xlsx = pd.read_excel(r'data.xlsx')

二、查看数据(尺寸信息、查看列名等方法)

DataFrame类型常用的一些方法

用type函数查看数据类型

type(data_csv)
type(data_xlsx)

pandas.core.frame.DataFrame
data_csv.head()

显示前5行的数据内容,可以对数据有一个大致的了解,去初步看有哪些特征,和标签

# 查看数据尺寸(行数, 列数)
print("数据尺寸:", data_csv.shape)

# 查看列名
print("列名:", data_csv.columns.tolist())

# 查看数据详细信息(包括数据类型和空值情况)
data_csv.info()

# 查看数值型列的统计描述
print("数据统计描述:\n", data_csv.describe())

数据处理第一步:

总览缺失值与数据类型情况,发现Annual Income、years in current job、months since last delinquent 、bankruptcies和credit score 这几个特征是有缺失的 ,想办法补全

三、查看空值

# 查看每列空值数量
print("每列空值数量:\n", data_csv.isnull().sum())

# 查看空值占比
print("每列空值占比:\n", data_csv.isnull().mean().round(4) * 100)


每列空值数量:
 Id                                 0
Home Ownership                     0
Annual Income                   1557
Years in current job             371
Tax Liens                          0
Number of Open Accounts            0
Years of Credit History            0
Maximum Open Credit                0
Number of Credit Problems          0
Months since last delinquent    4081
Bankruptcies                      14
Purpose                            0
Term                               0
Current Loan Amount                0
Current Credit Balance             0
Monthly Debt                       0
Credit Score                    1557
Credit Default                     0
dtype: int64
每列空值占比:
 Id                               0.00
Home Ownership                   0.00
Annual Income                   20.76
Years in current job             4.95
Tax Liens                        0.00
Number of Open Accounts          0.00
Years of Credit History          0.00
Maximum Open Credit              0.00
Number of Credit Problems        0.00
Months since last delinquent    54.41
Bankruptcies                     0.19
Purpose                          0.00
Term                             0.00
Current Loan Amount              0.00
Current Credit Balance           0.00
Monthly Debt                     0.00
Credit Score                    20.76
Credit Default                   0.00
dtype: float64

四、用众数,中位数填补缺失值

# 示例:填补数值型列(Annual Income)的空值(中位数)
data_csv['Annual Income'] = data_csv['Annual Income'].fillna(data_csv['Annual Income'].median())

# 示例:填补分类型列(Years in current job)的空值(众数)
# 众数可能有多个,取第一个众数[0]
data_csv['Years in current job'] = data_csv['Years in current job'].fillna(data_csv['Years in current job'].mode()[0])

五、利用循环补全所有列的空值

# 循环遍历每一列
for column in data_csv.columns:
    # 判断列数据类型
    if data_csv[column].dtype in ['float64', 'int64']:
        # 数值型列:使用中位数填补
        data_csv[column].fillna(data_csv[column].median(), inplace=True)
    else:
        # 分类型列:使用众数填补
        # 处理可能没有众数的情况(添加错误处理)
        try:
            data_csv[column].fillna(data_csv[column].mode()[0], inplace=True)
        except IndexError:
            # 如果众数不存在(所有值都是NaN),用'Unknown'填充
            data_csv[column].fillna('Unknown', inplace=True)

# 验证所有空值是否已填补
print("填补后空值数量:\n", data_csv.isnull().sum())

在py文件实践中,会发现有警告出现

这个警告是由于 pandas 中链式赋值结合 inplace=True 导致的潜在问题,主要涉及数据副本与原数据的修改机制。以下是具体解释和解决方案:

### 问题原因
当使用 data_csv[column].fillna(..., inplace=True) 时:

1. 1.
   data_csv[column] 会返回原 DataFrame 的 副本 (而非视图)
2. 2.
   inplace=True 尝试在这个副本上修改数据, 不会影响原始 DataFrame
3. 3.
   pandas 3.0 会明确禁用这种无效操作,因此抛出警告
### 解决方案:移除 inplace=True,改用直接赋值

副本是不会影响原数据的,视图是在原数据的基础上进行修改,那数据处理的时候应该保留数据备份,然后采用直接赋值的形式会更高效一些吧。

明天试着自己敲一下4、5块的循环补充代码

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值