检测缺失数据
使用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.split或np.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)。


5552

被折叠的 条评论
为什么被折叠?



