python 如何做数据清洗

处理缺失值

  • 删除含有缺失值的行或列
    • Pandas 中,如果有一个数据框 df,可以使用 dropna 方法删除包含缺失值的行。例如:df.dropna(axis = 0),其中 axis = 0 表示按行操作。如果要删除包含缺失值的列,可以设置 axis = 1,如 df.dropna(axis = 1)
    • 可以添加 subset 参数来指定在哪些列中检查缺失值。例如,df.dropna(subset=['column1', 'column2']) 会删除在 column1column2 列中至少有一个缺失值的行。
  • 填充缺失值
    • 使用 fillna 方法填充缺失值。对于数值型数据,可以用均值、中位数或众数填充。假设 df 是一个数据框,column_name 是包含缺失值的列。可以用均值填充,如 df['column_name'].fillna(df['column_name'].mean(), inplace=True)inplace=True 表示直接在原数据上修改)。
    • 对于分类数据,可以用众数填充。例如 df['category_column'].fillna(df['category_column'].mode()[0], inplace=True)

处理重复值

  • 识别重复值
    • Pandas 中,使用 duplicated 方法来识别重复的行。例如,df.duplicated() 会返回一个布尔序列,True 表示该行是重复的。可以使用 keep='first'(默认)参数,除了第一次出现的行,后面重复的行标记为 Truekeep='last' 则是除了最后一次出现的行,前面重复的行标记为 Truekeep=False 会将所有重复行都标记为 True
  • 删除重复值
    • 使用 drop_duplicates 方法删除重复行。例如,df.drop_duplicates(inplace = True) 会删除数据框中的重复行,只保留第一次出现的行。可以添加 subset 参数来指定根据哪些列来判断是否重复。例如,df.drop_duplicates(subset=['column1', 'column2'], inplace=True) 会根据 column1column2 列的值来判断是否为重复行并删除。

数据格式转换

  • 数据类型转换
    • 对于 Pandas 数据框中的列,可以使用 astype 方法转换数据类型。例如,如果 column_name 列存储的数据应该是整数类型,但实际为浮点数或字符串类型,可以使用 df['column_name'].astype(int) 进行转换。需要注意的是,如果字符串无法正确转换为整数,会抛出错误。
  • 日期格式转换
    • 假设数据框中有一个日期列 date_column,其日期格式为 'YYYY - MM - DD',但需要转换为 'YYYYMMDD' 格式。可以使用 Pandasto_datetime 方法先将列转换为日期时间类型,然后使用 dt.strftime 方法进行格式转换。例如:
df['date_column'] = pd.to_datetime(df['date_column'])
df['date_column'] = df['date_column'].dt.strftime('%Y%m%d')

处理异常值

  • 统计方法识别异常值
    • 对于数值型数据,可以使用箱线图(Box - Plot)的原理来识别异常值。在 PandasNumPy 中,通常使用四分位数(Q1Q3)来定义数据的分布范围。IQR = Q3 - Q1,一般认为小于 Q1 - 1.5*IQR 或大于 Q3 + 1.5*IQR 的数据点为异常值。例如,对于数据框 df 中的 numeric_column 列:
Q1 = df['numeric_column'].quantile(0.25)
Q3 = df['numeric_column'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5*IQR
upper_bound = Q3 + 1.5*IQR
outliers = df[(df['numeric_column'] < lower_bound) | (df['numeric_column'] > upper_bound)]
  • 处理异常值
    • 可以删除异常值,如 df = df[(df['numeric_column'] >= lower_bound) & (df['numeric_column'] <= upper_bound)]
    • 也可以对异常值进行修正,例如将异常值替换为边界值。假设 numeric_column 列存在异常值,将小于 lower_bound 的值替换为 lower_bound,大于 upper_bound 的值替换为 upper_bound
df['numeric_column'] = df['numeric_column'].apply(lambda x: lower_bound if x < lower_bound else (upper_bound if x > upper_bound else x))

文本数据清洗(如果数据包含文本)

  • 去除空白字符
    • 对于 Pandas 数据框中的文本列,可以使用 str.strip 方法去除字符串两端的空白字符。例如,df['text_column'] = df['text_column'].str.strip()。如果只想去除左边的空白字符,可以使用 str.lstrip;只想去除右边的空白字符,可以使用 str.rstrip
  • 大小写转换
    • 使用 str.lowerstr.upper 方法转换文本的大小写。例如,df['text_column'] = df['text_column'].str.lower() 将列中的所有文本转换为小写。
  • 替换文本内容
    • 使用 str.replace 方法替换文本中的特定字符或字符串。例如,df['text_column'] = df['text_column'].str.replace('old_text', 'new_text')text_column 列中的 old_text 替换为 new_text

你可能感兴趣的:(python,开发语言)