Pandas缺失数据处理

检测缺失数据

使用isnull()isna()方法可以检测DataFrame或Series中的缺失值,返回一个布尔掩码:

df.isnull()

notna()notnull()用于反向检测非缺失值:

df.notna()

删除缺失数据

dropna()方法可以删除包含缺失值的行或列:

# 删除含有任何NaN的行
df.dropna(axis=0)

# 删除所有列均为NaN的行
df.dropna(how='all')

# 删除包含NaN的列
df.dropna(axis=1)

填充缺失数据

fillna()方法允许用特定值填充缺失数据:

# 用固定值填充
df.fillna(0)

# 前向填充(使用前一个有效值)
df.fillna(method='ffill')

# 后向填充(使用后一个有效值)
df.fillna(method='bfill')

# 使用列均值填充
df.fillna(df.mean())

插值方法

Pandas提供interpolate()方法进行插值计算:

# 线性插值
df.interpolate()

# 时间索引的插值
df.interpolate(method='time')

复杂填充策略

对分组数据可以使用transform结合填充方法:

df.groupby('category').transform(lambda x: x.fillna(x.mean()))

对于时间序列数据,可以结合resample进行填充:

df.resample('D').mean().interpolate()

自定义缺失值标记

某些数据集可能使用特殊值(如-999)表示缺失,可以替换为NaN:

df.replace(-999, np.nan)

检测缺失数据

使用isnull()isna()方法可以检测DataFrame或Series中的缺失值,返回一个布尔掩码:

df.isnull()

notna()notnull()用于反向检测非缺失值:

df.notna()

删除缺失数据

dropna()方法可以删除包含缺失值的行或列:

# 删除含有任何NaN的行
df.dropna(axis=0)

# 删除所有列均为NaN的行
df.dropna(how='all')

# 删除包含NaN的列
df.dropna(axis=1)

填充缺失数据

fillna()方法允许用特定值填充缺失数据:

# 用固定值填充
df.fillna(0)

# 前向填充(使用前一个有效值)
df.fillna(method='ffill')

# 后向填充(使用后一个有效值)
df.fillna(method='bfill')

# 使用列均值填充
df.fillna(df.mean())

插值方法

Pandas提供interpolate()方法进行插值计算:

# 线性插值
df.interpolate()

# 时间索引的插值
df.interpolate(method='time')

复杂填充策略

对分组数据可以使用transform结合填充方法:

df.groupby('category').transform(lambda x: x.fillna(x.mean()))

对于时间序列数据,可以结合resample进行填充:

df.resample('D').mean().interpolate()

自定义缺失值标记

某些数据集可能使用特殊值(如-999)表示缺失,可以替换为NaN:

df.replace(-999, np.nan)

数据处理操作

数据切分与形状调整

对数据列进行切分时,需确保操作后仍保持一列结构。例如,若原始数据为单列,切分操作需以第一列为基准重新组合,最终输出仍为单列。可通过以下逻辑实现:

  • 使用 np.splitnp.reshape 调整形状,确保输出维度为 (n_samples, 1)
  • 示例代码片段:
    import numpy as np
    X = np.array([[10], [40], [20], [50]])  # 原始数据
    X_split = np.split(X, X.shape[0])       # 切分为多行
    X_reshaped = np.reshape(X, (-1, 1))     # 重新调整为一列
    

数据二值化操作

设定阈值为30,通过 transform 方法完成二值化转换:

  • 使用 sklearn.preprocessing.Binarizer,设置 threshold=30
  • 需替换原始列以显示结果,否则需两次切分操作更新数据。
  • 示例代码:
    from sklearn.preprocessing import Binarizer
    transformer = Binarizer(threshold=30).fit(X)
    X_binary = transformer.transform(X)     # 直接转换
    print(X_binary[:3])                     # 输出前三行验证
    

    输出示例:
    [[0]
     [1]
     [0]]
    

关键注意事项

  • 数据替换必要性:若未将二值化结果赋值回原变量,需重新执行切分操作以更新数据。
  • 格式差异:直接输出 transformer 会显示对象信息,而非结果数组。需通过 transform 方法获取数值。
  • 验证逻辑:通过输出前几行数据确认操作正确性,确保同学理解二值化阈值的作用(>30为1,≤30为0)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值