Pandas数据清理

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 本分步教程适用于初学者,指导他们使用强大的 Pandas 库完成数据清理和预处理过程
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景

介绍

如果您喜欢数据科学,那么数据清理对您来说可能听起来像是一个熟悉的术语。如果没有,让我向你解释一下。我们的数据通常来自多个资源,并不干净。它可能包含缺失值、重复项、错误或不需要的格式等。对这些混乱的数据运行实验会导致不正确的结果。因此,有必要在将数据馈送到模型之前准备数据。通过识别和解决潜在的错误、不准确和不一致来准备数据称为数据清理

在本教程中,我将引导您完成使用 Pandas 清理数据的过程。

数据

我将使用著名的鸢尾花数据集。鸢尾花数据集包含三种鸢尾花的四个特征的测量值:萼片长度、萼片宽度、花瓣长度和花瓣宽度。我们将使用以下库:

  • pandas用于数据操作和分析的强大库
  • Scikit-learn: 提供用于数据预处理和机器学习的工具

数据清理步骤

1. 加载数据集

使用 Pandas 的 read_csv() 函数加载鸢尾花数据集:

column_names = ['id', 'sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']
iris_data = pd.read_csv('data/Iris.csv', names= column_names, header=0)
iris_data.head()

输出:

编号 sepal_length sepal_width petal_length petal_width 物种
1 5.1 3.5 1.4 0.2 鸢尾花
2 4.9 3.0 1.4 0.2 鸢尾花
3 4.7 3.2 1.3 0.2 鸢尾花
4 4.6 3.1 1.5 0.2 鸢尾花
5 5.0 3.6 1.4 0.2 鸢尾花

header=0 参数指示 CSV 文件的第一行包含列名(标题)。

2. 浏览数据集

为了深入了解我们的数据集,我们将使用 pandas 中的内置函数打印一些基本信息

print(iris_data.info())
print(iris_data.describe())

输出:

RangeIndex: 150 entries, 0 to 149
Data columns (total 6 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   id            150 non-null    int64  
 1   sepal_length  150 non-null    float64
 2   sepal_width   150 non-null    float64
 3   petal_length  150 non-null    float64
 4   petal_width   150 non-null    float64
 5   species       150 non-null    object 
dtypes: float64(4), int64(1), object(1)
memory usage: 7.2+ KB
None

iris_data.describe() 的输出

info() 函数可用于了解数据帧的整体结构、每列中非空值的数量以及内存使用情况。而汇总统计数据则提供了数据集中数值要素的概述。

3. 检查类分布

这是了解类如何在分类列中分布的重要步骤,这是分类的重要任务。您可以使用 pandas 中的 value_counts() 函数执行此步骤。

print(iris_data['species'].value_counts())

输出:

Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
Name: species, dtype: int64

我们的结果表明,数据集是平衡的,每个物种的表示数量相等。这为所有 3 个班级的公平评估和比较奠定了基础。

4. 删除缺失值

由于从 info() 方法中可以明显看出我们有 5 列没有缺失值,因此我们将跳过此步骤。但是,如果遇到任何缺失值,请使用以下命令来处理它们:

iris_data.dropna(inplace=True)

5. 删除重复项

重复项可能会扭曲我们的分析,因此我们会将它们从数据集中删除。我们将首先使用下面提到的命令检查它们的存在:

duplicate_rows = iris_data.duplicated()
print("Number of duplicate rows:", duplicate_rows.sum())

输出:

Number of duplicate rows: 0

此数据集没有任何重复项。尽管如此,可以通过 drop_duplicates() 函数删除重复项。

iris_data.drop_duplicates(inplace=True)

6. 独热编码

对于分类分析,我们将对物种列执行独热编码。执行此步骤是由于机器学习算法倾向于更好地处理数值数据。独热编码过程将分类变量转换为二进制(0 或 1)格式。

encoded_species = pd.get_dummies(iris_data['species'], prefix='species', drop_first=False).astype('int')
iris_data = pd.concat([iris_data, encoded_species], axis=1)
iris_data.drop(columns=['species'], inplace=True)

图片来源:作者

7. 浮点值列的规范化

归一化是将数值特征缩放为平均值为 0 且标准差为 1 的过程。执行此过程是为了确保要素对分析的贡献相同。我们将规范化浮点值列以实现一致的缩放。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
cols_to_normalize = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
scaled_data = scaler.fit(iris_data[cols_to_normalize])
iris_data[cols_to_normalize] = scaler.transform(iris_data[cols_to_normalize])

规范化

后 iris_data.describe() 的输出

8. 保存已清理的数据集

将清理后的数据集保存到新的 CSV 文件。

iris_data.to_csv('cleaned_iris.csv', index=False)


总结

祝贺!您已成功使用 pandas 清理了第一个数据集。在处理复杂数据集时,您可能会遇到其他挑战。但是,此处提到的基本技术将帮助您入门并准备数据以进行分析。


原文链接:https://www.mvrlink.com/data-cleaning-with-pandas/


目录
相关文章
|
21天前
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by='A', ascending=False)`。`rank()`函数用于计算排名,如`df['A'].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=['A', 'B'], ascending=[True, False])`和分别对'A'、'B'列排名。
24 2
|
21天前
|
存储 Python
使用Pandas库对非数值型数据进行排序和排名
在Pandas中,支持对非数值型数据排序和排名。可按以下方法操作:1) 字符串排序,使用`sort_values()`,如`sorted_df = df.sort_values(by='Name', ascending=False)`进行降序排序;2) 日期排序,先用`to_datetime()`转换,再排序,如`sorted_df = df.sort_values(by='Date')`;3) 自定义排序,结合`argsort()`和自定义规则。
27 2
|
16天前
|
数据采集 数据处理 索引
如何使用 Pandas 删除 DataFrame 中的非数字类型数据?
如何使用 Pandas 删除 DataFrame 中的非数字类型数据?
27 3
|
18天前
|
存储 数据挖掘 数据处理
使用pandas高效读取筛选csv数据
本文介绍了使用Python的Pandas库读取和处理CSV文件。首先,确保安装了Pandas,然后通过`pd.read_csv()`函数读取CSV,可自定义分隔符、列名、索引等。使用`head()`查看数据前几行,`info()`获取基本信息。Pandas为数据分析提供强大支持,是数据科学家的常用工具。
23 0
|
20天前
|
数据挖掘 数据处理 索引
如何使用Python的Pandas库进行数据筛选和过滤?
Pandas是Python数据分析的核心库,提供DataFrame数据结构。基本步骤包括导入库、创建DataFrame及进行数据筛选。示例代码展示了如何通过布尔索引、`query()`和`loc[]`方法筛选`Age`大于19的记录。
21 0
|
20天前
|
索引 Python
如何使用Pandas进行数据合并?
Pandas提供`merge()`, `join()`, `concat()`等方法进行数据合并。基本步骤包括导入pandas库、创建或加载DataFrame,然后调用这些方法合并数据。示例中展示了如何使用`merge()`和`join()`:创建两个DataFrame `df1`和`df2`,通过`merge()`基于索引合并,以及`join()`进行外连接合并。
21 0
|
21天前
|
Python
如何使用Python的Pandas库进行数据缺失值处理?
Pandas在Python中提供多种处理缺失值的方法:1) 使用`isnull()`检查;2) `dropna()`删除含缺失值的行或列;3) `fillna()`用常数、前后值填充;4) `interpolate()`进行插值填充。根据需求选择合适的方法处理数据缺失。
45 9
|
24天前
|
索引 Python
如何使用Python的Pandas库进行数据透视表(pivot table)操作?
使用Pandas在Python中创建数据透视表的步骤包括:安装Pandas库,导入它,创建或读取数据(如DataFrame),使用`pd.pivot_table()`指定数据框、行索引、列索引和值,计算聚合函数(如平均分),并可打印或保存结果到文件。这允许对数据进行高效汇总和分析。
11 2
|
26天前
|
数据挖掘 数据处理 索引
Pandas时间序列处理:时间数据的魅力
【4月更文挑战第16天】Pandas是Python中用于数据处理的库,特别适合时间序列数据操作。它提供`date_range`和`Timestamp`创建时间序列索引,支持以时间为DataFrame和Series的索引。Pandas的`resample`方法允许重采样和频率转换,如日数据转周数据。`rolling`方法用于移动窗口操作,如计算移动平均值。此外,还能进行日期偏移和时区转换,如`shift`和`tz_convert`。通过这些功能,Pandas帮助分析时间序列中的趋势和模式,提升数据分析效率。
|
26天前
|
数据挖掘 数据处理 索引
数据合并与连接:Pandas中的强大数据整合功能
【4月更文挑战第16天】Pandas是Python数据分析的库,提供数据合并与连接功能。本文聚焦于`merge`和`concat`函数。`merge`基于键合并DataFrame,如示例中`df1`和`df2`按'key'列合并,支持多种连接方式。`concat`则沿轴堆叠DataFrame,如`df3`和`df4`沿行连接。注意合并连接时键的一致性、选择合适连接方式及处理索引和数据结构,以确保数据准确一致。学习这些方法能有效整合多数据源,便于分析。