检测并修复数据问题
PyCharm 可自动分析加载到 pandas DataFrame 并在 Jupyter Notebook 单元格中显示的数据集。 该 IDE 会突出显示潜在问题,例如缺失值、离群值、重复行或相关列——便于在建模前清理您的数据。
PyCharm 会自动分析满足以下条件的任何 DataFrame:
包含不超过 100,000 行。
包含不超过 200 列。
使用
df、df.head()、df[x:y]、df.loc(.. .)或df.iloc(...)显示。
如果发现至少一个问题,则 DataFrame 工具栏会显示 数据集问题 按钮。
使用 AI 修复数据问题
在 DataFrame 工具栏中点击
数据集问题 按钮。 将打开 数据集质量问题 对话框。

选择要修复的问题并点击 使用 AI 修复 按钮。

将在 DataFrame 下方创建一个新的代码单元格,其中包含建议的更改。
常见问题及处理方法
缺失值
数据集中某些单元格可能没有值,表示为 NaN、 None 或空字符串。 这通常发生在数据收集、合并或文件导入期间。 如果忽略,缺失值可能会为您的分析引入偏差。 某些机器学习算法也无法在包含缺失值的数据上运行。
例如,在 salary 列中发现了 6 个空单元格:

处理此问题的典型方法包括:
删除具有过多未知值的行或列:
df = df.dropna()将未知值替换为常量,例如
0或Unknown:df['Name'] = df['Name'].fillna('Unknown')将未知值替换为该列的均值、中位数或众数:
df = df.fillna(df.mean())使用机器学习模型(例如线性回归或 k 近邻)预测并替换缺失值:
from sklearn.impute import KNNImputer imputer = KNNImputer(n_neighbors=5) df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
重复行
数据集中的某些行可能完全相同,例如由于重复导入或日志记录错误造成。 如果忽略,它们可能会造成偏差,使统计结果不可靠。
例如,在数据集中发现了 2 行重复行:

处理此问题的典型方法包括:
删除所有重复行:
df = df.drop_duplicates()删除除首次出现以外的所有重复项:
df = df.drop_duplicates(keep='first')
离群值
离群值是与数据集中大多数其他值显著不同的数据点。 它们会扭曲统计结果,并影响机器学习模型。
您可以将离群值定义为超过绝对阈值或落在统计边界之外的值。
通常建议仅在您认为它们属于与您试图针对的总体不同的总体时才删除离群值。 有关详细信息,请参阅 本文。
例如,在 salary 和 age 列中发现了离群值:

处理此问题的典型方法包括:
使用统计方法(例如平均绝对偏差)发现极端值:
from scipy.stats import median_abs_deviation median = data['colname'].median() mean_absolute_deviation = median_abs_deviation(data['colname'], scale='normal') data['modified_z_score'] = (data['colname'] - median) / mean_absolute_deviation data['is_outlier'] = (data['modified_z_score'] > 3) | (data['modified_z_score'] < -3)删除具有极端值的行:
df = df[df['salary'] < 20000]将极端值限定到阈值:
df['salary'] = np.where(df['salary'] > 20000, 20000, df['salary'])对数值进行变换以减小离群值的影响(例如应用对数变换):
df['salary_log'] = np.log1p(df['salary'])
常量列
数据集中某些列可能在所有行中具有相同的值。 此类常量列通常不会为您的分析或模型提供任何有用信息,因为它们没有变异性。
例如,发现列 country 的值恒为 USA:

处理此问题的典型方法是:
删除所有单值列:
df = df.drop(columns=single_value_cols)