数据清洗简单入门

数据清洗是大数据时代确保数据准确性的关键步骤。它涉及识别并纠正数据集中的错误,如异常值(如年龄9999)和不合理值(如体重0.0001)。通过使用Python的pandas库,可以方便地读取、分析数据,制定解决方案,编写代码清洗数据,并最终存储清洗后的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是数据清洗

在大数据时代下,我们在针对某一问题的研究时,会有很多数据,但是这些数据一定是合理且能够使用的数据吗?答案当然是否定的。
比如学生信息数据集中,可能有人恶意将年龄写成9999,将重量写成0.0001,如果我们直接使用这些可能出现的错误数据,那么在进行之后的数据分析或者是机器学习时,这些情况都会导致很大的误差。
那么数据清洗这一名词就出现了,其原理就是,先知道数据中大致有哪些错误,然后将这些错误问题一一解决。

数据清洗过程

  1. 引入数据处理的pandas包
    pandas可以很方便的让我们进行数据清洗的过程吗。
  2. 读取所要清洗的数据
  3. 分析数据中可能存在的问题
  4. 针对上述问题选取合理的解决方案
  5. 进行代码编写,完成解决方案
  6. 应用到所选取的数据中
  7. 将清洗完成的数据重新进行存储

数据大概如图
在这里插入图片描述

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt


def truncate_value(value):
    if value == 0:
        return None
    return value * (-1)


# 定义一个函数,对数值大于1000的进行截取两位
def truncate_value_year(value):
    if value > 1000:
        return int(value) % 100
    return value


def truncate_value_weight(value):
    while value < 1000:
        print(value)
        value = value * 10
    return value


df = pd.read_csv("Auto.csv")
# print(df[-5:])
# 提取除了某一列之外的所有列
columns_to_check = df.columns.difference(['name'])
# 将除了某一列之外的所有列尝试转换为数字,无法转换的设置为NaN
df[columns_to_check] = df[columns_to_check].apply(pd.to_numeric, errors='coerce')
# 删除包含NaN值的行
df = df.dropna()
# 将所有数字转换为大于0的数
df[columns_to_check] = df[columns_to_check].applymap(lambda x: truncate_value(x) if x <= 0 else x)
# 删除包含值为0的行
df = df.dropna()
# 删除座位大小不符合的内容
df = df[(df['cylinders'] >= 4) & (df['cylinders'] <= 8)]
# 修改生产年月不符合的数据
df['year'] = df['year'].apply(truncate_value_year)
# 修改生产年月不符合的数据
df['weight'] = df['weight'].apply(truncate_value_weight)
df_cleaned = df
df.to_csv('clean_data.csv', index=False)


# 绘制带有线性回归线的散点图
plt.figure(figsize=(10, 6))
sns.lmplot(x='year', y='mpg', data=df_cleaned, ci=None)
plt.title('MPG vs Year with Linear Regression')
plt.xlabel('Year')
plt.ylabel('MPG')
plt.grid(True)
plt.show()


plt.figure(figsize=(10, 6))
plt.scatter(df_cleaned['year'], df_cleaned['mpg'], alpha=0.5, label='Data')
# 拟合趋势线
x = df_cleaned['year']
y = df_cleaned['mpg']
coefficients = np.polyfit(x, y, 1)
polynomial = np.poly1d(coefficients)
plt.plot(x, polynomial(x), color='red', label='Trendline')
# 添加标签和标题
plt.title('MPG vs Year with Trendline')
plt.xlabel('Year')
plt.ylabel('MPG')
plt.legend()
# 显示图形
plt.grid(True)
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值