像学Excel 一样学 Pandas系列-数据探索和数据清洗

又到今天 Pandas学习时间,间隔有一点点久了。我们先来回忆一下,一个完整数据分析的过程,包含哪些部分内容:

图片

其中,Pandas 的基础信息导入、数据导入和数据整理已经在前两篇文章里聊过。

先导知识和数据读取/合并见这两篇文章,感兴趣的小伙伴,可以点击链接跳转观看。

这篇文章,我们来聊聊最繁琐的数据探索和数据清洗阶段。数据分析圈里有一个玩笑话,完成一份数据分析报告,其中,有 80%的精力都在做数据探索和数据清洗工作。剩余的 20%才是报告撰写。

图片

使用Pandas进行数据探索和数据清洗是一个系统性的过程。

图片

拿到数据之后,需要看清楚数据长啥样,这部分工作,叫做数据探索。

如果有奇怪的数据,该清洗清洗,该删除删除,空缺的数据,能填充的填充,这部分就叫做数据清洗。

为了方便后续的演示,我创建一个虚拟的Pandas DataFrame来演示数据探索和清洗的过程。假设我们有一个关于汽车销售的数据集,包含以下字段:

  • CarID: 汽车的唯一标识符

  • Model: 汽车型号

  • Year: 年份

  • Price: 价格

  • Origin: 产地

  • MPG: 每加仑英里数(燃油效率)

  • Color: 颜色

import pandas as pdimport numpy as np
# 创建数据的字典data = {    'CarID': [1, 2, 3, 4, 5],    'Model': ['CarA', 'CarB', 'CarA', 'CarC', 'CarB'],    'Year': [2020, 2019, 2021, 2022, 2018],    'Price': [20000, 22000, 24000, 21000, 19000],    'Origin': ['USA', 'Japan', 'USA', 'Germany', 'USA'],    'MPG': [25, 30, 28, 32, 27],    'Color': ['Red', 'Blue', np.nan, 'Black', 'White']}
# 创建DataFramedf = pd.DataFrame(data)

图片

接下来,用这份数据分开讲解数据探索和数据清洗。

01 数据探索 Data Exploration

使用Pandas进行数据探索是一个深入了解数据集特征、识别数据问题和做出数据驱动决策的过程。以下是对虚拟数据集df进行数据探索的详细介绍。

1. 查看数据集的前几行

使用head()函数可以查看数据集的前几行,这有助于快速了解数据的概貌。

 
print(df.head())

图片

2. 获取数据集的基本信息

info()函数提供了数据集的详细概览,包括每列的数据类型、非空值数量等。

df.info()

图片

3. 描述性统计

describe()函数为数值型列提供了统计摘要,包括计数、平均值、标准差、最小值、四分位数等。

df.describe()

图片

4. 查看数据集的列名

通过columns属性可以查看数据集中所有列的名字。

print(df.columns)

图片

5. 检查缺失值

使用isnull()函数可以检查数据集中的缺失值,sum()函数可以计算每列缺失值的数量。

print(df.isnull().sum())

图片

6. 数据分布

对于分类数据,可以使用value_counts()函数来查看各个类别的出现次数。

df['Origin'].value_counts()

图片

对于数值型数据,可以使用hist()函数绘制直方图来查看分布情况。

df['Price'].hist()

图片

02 数据清洗(Data Cleaning)

1. 处理缺失值

对于缺失值,可以选择填充或删除。

  • 填充缺失值:使用fillna()函数填充缺失值,例如用特定值或前一个/后一个值填充。

df['Color'] = df['Color'].fillna('Unknown')

图片

  • 删除缺失值:使用dropna()函数删除含有缺失值的行或列。

# 删除含有缺失值的行df = df.dropna()

图片

# 删除含有缺失值的列,例如如果'Color'列的缺失值太多,可以选择删除整列 df = df.drop(columns=['Color'])

图片

2. 处理重复数据

使用duplicated()或drop_duplicates()函数检查和删除重复的行。​​​​​​​

# 检查重复的行print(df.duplicated())

图片

# 删除重复的行df = df.drop_duplicates()

3. 数据类型转换

确保每列的数据类型正确,使用astype()函数进行转换。​​​​​​​

# 例如,将'Year'列转换为整数类型df['Year'] = df['Year'].astype(int)

图片

4. 处理异常值

根据业务逻辑或统计方法(如IQR)识别并处理异常值。​​​​​​​

Q1 = df['Price'].quantile(0.25)Q3 = df['Price'].quantile(0.75)IQR = Q3 - Q1# 过滤掉异常值df = df[~((df['Price'] < (Q1 - 1.5 * IQR)) | (df['Price'] > (Q3 + 1.5 * IQR)))]

图片

5. 标准化和归一化

对数值型数据进行标准化或归一化处理,以消除不同量纲的影响。​​​​​​​

# 标准化(Z-score normalization)df['Price_normalized'] = (df['Price'] - df['Price'].mean()) / df['Price'].std()
# 归一化(Min-Max scaling)df['Price_scaled'] = (df['Price'] - df['Price'].min()) / (df['Price'].max() - df['Price'].min())

图片

6. 特征工程

根据业务需求,可能需要创建新的特征或修改现有特征。​​​​​​​

# 例如,从'Year'列创建一个新特征'Age',表示汽车的年龄df['Age'] = 2024 - df['Year']

图片

7. 数据集筛选和过滤

根据特定条件过滤数据集,这里的条件可以灵活组合。​​​​​​​

# 例如,选择价格在20000到25000之间的汽车df_filtered = df[(df['Price'] >= 20000) & (df['Price'] <= 25000)]

图片

8. 数据集排序

根据某个列对数据集进行排序。​​​​​​​

# 例如,根据价格降序排序df_sorted = df.sort_values(by='Price', ascending=False)

图片

感兴趣的小伙伴,欢迎关注、点赞、评论转发。您的每一份互动,都是我肝下去的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值