![Python数据预处理技术与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/321/27563321/b_27563321.jpg)
2.3 Pandas
Pandas也是一个常用的Python科学计算工具包,被广泛用于包括金融、经济、统计、分析等学术和商业领域的数据分析、数据清洗和准备等工作,是数据预处理的核心模块。使用Pandas可以完成数据处理和分析的5个典型步骤即数据加载、数据准备、操作、模型和分析。本节主要介绍Pandas的安装和特点以及Pandas的数据结构、数据统计、处理缺失值、稀疏数据、文件操作和可视化技术。
Pandas的官网:https://pandas.pydata.org/,如图2-13所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P47_7965.jpg?sign=1738843625-4jl2CTWFYhbtnjlirvt4j7To0CVHH6Z4-0-0603922344c6971396f7b38c05909b8a)
图2-13 Pandas官网
(源代码见:Chapter2/PandasDome.py)
2.3.1 Pandas的安装和特点
1. Pandas的安装
可以通过以下3种方法安装Pandas:
方法一 Anaconda已经集成了Pandas,读者在命令提示符环境下查看:conda list。
方法二 可以通过pip自动安装,执行如下命令:pip install pandas。
方法三 在GitHub上下载Pandas源码(网址:https://github.com/pandas-dev/pandas),然后在源码根目录下执行如下命令:python setup.py install。
安装完成后,检测是否成功。首先启动Sublime,然后按F6键进入Python环境,输入import pandas,得到以下状态即安装成功。如图2-14所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P48_7984.jpg?sign=1738843625-TSiaWPB7tIVpbxHtxdgji252J2WpxhpY-0-364355b55c0159140e5ba74792671987)
图2-14 验证Pandas是否安装成功
2. Pandas的特点
Pandas快速高效、对缺失值自动处理及支持异构数据类型等诸多特点深受Python爱好者的喜欢,其主要特点包括:
- 快速高效的DataFrame对象,具有默认和自定义的索引。
- 将数据从不同文件格式加载到内存中的数据对象工具。
- 丢失数据的数据对齐和综合处理。
- 重组和摆动日期集。
- 基于标签的切片、索引和大数据集的子集。
- 可以删除或插入来自数据结构的列。
- 按数据分组进行聚合和转换。
- 高性能合并和数据加入。
- 时间序列功能。
- 具有异构类型列的表格数据,例如SQL表格或Excel数据。
2.3.2 Pandas的数据结构
Pandas可处理以下3种数据结构:
1. 系列(Series)
系列是具有均匀数据的一维数组结构。表2-6中的系列是整数1,3,5,6…的集合。
表2-6 一维数组
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T49_38728.jpg?sign=1738843625-ouCzXDgaFIw6ykgrif7fN316WL3LfAPW-0-d8edf62823b00ce4fc7329d83739d4ed)
代码实现:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P49_38727.jpg?sign=1738843625-MPOwfoldTkBCuu5JUCuYqq4EXwdN88cL-0-d6de06ba5ae65445a264e7e69d0ec5b2)
代码说明:
代码中使用了pandas.Series方法处理一位数组,该方法共有4个参数,即pandas.Series(data, index, dtype, copy),各参数的说明如下:
- data:传入的数据参数,数据类型支持数组、列表等。
- index:索引,与数据的长度相同。
- dtype:用于表示数据类型,省略是默认为浮点数据类型。
- copy:复制一份数据,默认为false。
运行结果:
100 a 101 b 102 c 103 d dtype: object
2. 数据帧(DataFrame)
数据帧是一个具有异构数据的二维数组,如表2-7所示。
表2-7 二维数组
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T49_38720.jpg?sign=1738843625-8bmYnlUE1K0MqXZcJ94aEKB0TMIUJIBN-0-add2305c3238fe6790f2da001cff72cd)
代码实现:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P50_38729.jpg?sign=1738843625-kKh0cRuND0GLxUVfPEALx0OlbiULCPyx-0-b451ff106dd022d617f3a79b5b300cf9)
代码说明:
代码中使用了pandas.DataFrame方法处理二维数据,该方法共有5个参数,即pandas.DataFrame( data, index, columns, dtype, copy),各参数说明如下:
- data:传入的数据参数,数据类型支持数组、列表、字典等。
- index:索引,与数据的长度相同。
- columns:列参数。
- dtype:用于表示数据类型,省略是默认为浮点型。
- copy:复制数据,默认为false(不复制)。
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P50_38733.jpg?sign=1738843625-KISDmISGEeBW1TxblxnmHu4qg26NFOGR-0-3d274e6216be648e71fb7302a4e89c11)
3. 面板(Panel)
面板是具有异构数据的三维数据结构,在图形表示中很难表示出面板,但是一个面板可以说明为DataFrame的容器。
代码实现:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P50_38734.jpg?sign=1738843625-DmCONflFuKAmIVOgNPInIdg2cmSVAfWh-0-6b22c49959c19f84ff5c567c5297bd89)
代码说明:
代码中使用了pandas.Panel方法,该方法表示创建一个面板。该方法共有6个参数,即pandas.Panel (data, items, majoraxis, minoraxis, dtype, copy),各参数的含义如下:
- data:传入的数据参数,数据类型支持数组、列表、字典等。
- items:axis 0,每个项目对应于内部包含的数据帧(DataFrame)。
- major_axis:axis 1,表示每个数据帧(DataFrame)的行。
- minor_axis:axis 2,表示每个数据帧(DataFrame)的列。
- dtype:用于表示数据类型,省略是默认为浮点数据类型。
- copy:复制数据,默认为false(不复制)。
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P51_38738.jpg?sign=1738843625-IajxoXqRp9eiQh5gSvOlrhuoFKbhg72n-0-67eb5eb3c74b73a765e4a8a5c8b72b2d)
2.3.3 Pandas的数据统计
1. 利用DataFrame创建二维数组
代码实现:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P51_38739.jpg?sign=1738843625-oOKbiwGoavfvBCIeYzc20q0YC964vDFn-0-28d02a0dcbfe1db182aa033857a8222e)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P51_2353.jpg?sign=1738843625-YdlN8NLUwrQaqpe1lQbwRz28VhI1iXnb-0-aced077dfd43cbb37711c5c4233157d6)
2. 数据统计
代码实现:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P52_38742.jpg?sign=1738843625-aBkWlXDgpZ9eGx5Osdqy9buvbdXrcLAC-0-65bdb1a5b36eaaa296d3a28e825ad523)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P52_38743.jpg?sign=1738843625-Yg87CaN1yAgkvM6pwHMPV5Wb9iQmksPb-0-d546407c8b01e45e5d6de8ed387eed89)
Pandas的其他统计方法,如表2-8所示。
表2-8 Pandas的其他统计方法
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-T53_38747.jpg?sign=1738843625-n6fR28v50D6Mt8bkt1U88H7TopvzFxfW-0-de50155f6abda0ac9a5adc59affaa786)
2.3.4 Pandas处理丢失值
机器学习和数据挖掘等领域由于数据缺失导致的数据质量差,在模型预测的准确性上面临着严重的问题。为了提高模型效果可以使用Pandas对数据缺失值进行处理。
1. 构造一个含有缺失值的数据集
使用重构索引(Reindexing),创建有一个缺少值的DataFrame。代码实现:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P53_38746.jpg?sign=1738843625-PjEhYHxAaNuoMBJ5tEHSZ6EdNJj2H5zm-0-de30d946c675d5e90231106086197466)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P53_38745.jpg?sign=1738843625-8HZrL4xs0wCU5NkBPv62IvHrXYbDN7gZ-0-9e61e68ef6c3166eaf881f5d6d138b04)
在输出结果中,NaN表示不是数字的值。
2. 检查缺失值
Pandas提供了isnull()和notnull()函数,它们也是Series和DataFrame对象的方法,可用于检查缺失值,代码如下:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P54_38748.jpg?sign=1738843625-e41NyyvOY0a0UWZ4KqrSp2LhXkNpqmRV-0-4b65afca4189053c9e496d5b8a22bc2b)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P54_38750.jpg?sign=1738843625-pGsUOB5YjCe9Y6MFfK4lTfLQ9jeeD2UI-0-89cbb7d0193e519d98e13078eb018d75)
3. 清理/填充缺少数据
(1)用标量值0替换缺失值,其中g行表示缺少的数据。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P54_38751.jpg?sign=1738843625-2KcVgWiTfG5fbZFhHjPC8Nn4KtKmNfZ0-0-f65465cdea7f0da1789e4dd90751c0f5)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P54_38754.jpg?sign=1738843625-eVHtJl04EuYIXjcb7gMkllwHbKbVKqD9-0-900cfedc7896a6c9771163b7063cb680)
(2)用缺失值的前一行替换缺失值,例如a,b行,其中b为缺少数据。
实现代码如下:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P55_38756.jpg?sign=1738843625-LKdHsPVlPJ4lNzlpxoJ6Dd7V3l6Oy0Qv-0-a744f61cdf3d06ea39d0afb3285454cf)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P55_38758.jpg?sign=1738843625-zmd5A7MVQdaYYwMr0Bofwz9gmLDbHF4A-0-fc121ab0dfd85161f621d685ba9fc281)
(3)剔除缺失值。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P55_38759.jpg?sign=1738843625-vMqb13OPlVlZD060b1tixh7f95pc7Qcy-0-d56de985b50e75c7e52b75df96855bdf)
代码说明:
- axis=0:表示作用在行上,如果axis=1,则表示作用在列上。
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P56_38762.jpg?sign=1738843625-IwLyRu1HYIcrr4Lzp3Ctr1HE77kpJbbI-0-a078278fa2dbff5d45e952de8cf494c5)
(4)设置任意值替换缺失值,如one列的2000被60替换,two列的1000被10替换。
代码如下:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P56_38763.jpg?sign=1738843625-bs6KkkfI51wBx9WQkSKqlvJNedZm9zNx-0-40c734185d70e24709b225792da3b17c)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P56_38765.jpg?sign=1738843625-B9xi0F2qCx8MiL50olPROEzFPMEhyKAM-0-abafb7c7227c7d66d2fa35eb4232b4ec)
(5)忽略缺失值。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P56_38766.jpg?sign=1738843625-3VJapQD7mOFKhQ73mqe1eWNskvUMLNbF-0-54c39951bcaba8c8a89043422ac8682d)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P57_38769.jpg?sign=1738843625-gK8FJ8oZdpnN4jS2llJRgiA69DdxU1HW-0-ffb4263ee140cdd9334df9eaa51d5100)
2.3.5 Pandas处理稀疏数据
当任何匹配特定值的数据(NaN/缺失值或任何值)被省略时,稀疏对象被“压缩”。
稀疏数据处理
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P57_38772.jpg?sign=1738843625-3P25f2AAEvtIPlpEEqArnLsOFJCoehmx-0-6a10de81364679314d325b5df16f1073)
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P57_38773.jpg?sign=1738843625-8k1RcMMpa0rrUi575xmXcRbCd1Adh84T-0-76f46692b34b298506cb78cde61474c6)
2.3.6 Pandas的文件操作
Pandas库提供了一系列的read_函数来读取各种格式的文件,这些read_函数如下所示:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P58_38775.jpg?sign=1738843625-x6Mglt8Ua9SkDx4IojBerlPzqALQ6Zvt-0-a3e9120c77ecdb0eaa4af1cd9513e54b)
下面通过示例来说明部分函数的使用。
1. 操作Excel文件
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P58_38776.jpg?sign=1738843625-QzwWpPzzyLUm5s7kFY1IeURVudy2fGEc-0-160f8a2ca3973db3605f1053d9e31312)
代码说明:
本例表示使用Pandas的read_excel方法来处理Excel格式文件并打印输出Excel文件的内容。
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P58_38777.jpg?sign=1738843625-5tjxPNowsUJeCrWNblTB7KD8fuqjfB8N-0-4fb63415ab0b1690d3bec12fdeb0ff56)
2. 操作CSV文件
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P58_38779.jpg?sign=1738843625-G0w3tBYYnnjd24qEGiShCbN8HSrnz5CV-0-9566b52b077e9f428223ccdc209acb72)
代码说明:
本例使用Pandas的read_csv方法来处理CSV格式文件并打印出文件的内容。
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P59_38781.jpg?sign=1738843625-tKphWgrQy3HdcoVvI4S2o7mEmZPMzr0H-0-39b24e758eb369180b725d25c49340a2)
3. 操作JSON文件
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P59_38783.jpg?sign=1738843625-584MLGIcDe9DoV8YYM2kelfXlvDR7uMs-0-5b4f58a7ebf6c23c498fd5a49b783a6b)
代码说明:
本例首先将列表数据转化为JSON格式数据,然后调用Pandas的read_json方法处理JSON格式文件并打印输出内容。
运行结果:
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P59_9371.jpg?sign=1738843625-5m8WAFCbOVqOCpeK9AWP9ksxjkd1dylv-0-1d08c0f2a2fdf2b4d00c7dbb98b1b748)
2.3.7 Pandas可视化
1. 绘制折线图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P60_38786.jpg?sign=1738843625-R03l7JmT4DBg2lq5FoDwl9TPFh1sFGb8-0-6dce3119cf98ba28de68a0110f9591a8)
运行结果如图2-15所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P60_9474.jpg?sign=1738843625-BSUrpNBHNnEJBLihSTzculFpXZQbkKW7-0-0f40b78367d3dc0e10015b0c1c4ed903)
图2-15 折线图
2. 绘制条形图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P60_38787.jpg?sign=1738843625-BGrvuiiRPJwx38BAwZFDiNAvFC86HqV8-0-5de188fa0ca3864eca82efd41923a88b)
运行结果如图2-16所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P61_9559.jpg?sign=1738843625-XmJB4HvNvMmiGAt2sAqqa74tLm9Edmk9-0-b97e5a5ac2f19020135856c65c92f0a7)
图2-16 条形图
3. 绘制堆积条形图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P61_38789.jpg?sign=1738843625-cvTWgV1VvjTptGukEZCxmMvFPaCUPOxP-0-24b585db3d5c5964a75e6b4e678d67b1)
运行结果如图2-17所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P61_9648.jpg?sign=1738843625-7JdmwjuzVNQG31opqiJghYJBaSXd1KAH-0-bd19f59d22bb31b4583e928d9d36b486)
图2-17 堆积条形图
4. 绘制水平条形图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P62_38791.jpg?sign=1738843625-M8qBiMLLtu2O0JyPp0Ka9730qtnUfKbM-0-e50645d9a775033e111de42f2b6405a2)
运行结果如图2-18所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P62_9741.jpg?sign=1738843625-L5yNrOugWa2OaWdJdT5h5PZYje59aMOV-0-2f14a686f12b7412c643c5de1c540739)
图2-18 水平条形图
5. 绘制直方图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P62_38790.jpg?sign=1738843625-favJXAKdfkUIiHuv45iBZKJoTkR2zKe6-0-02d65a196596c11546c57f57ad54fac6)
运行结果如图2-19所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P63_9853.jpg?sign=1738843625-Fn1J0xGxboQArVqNmnyxicKzhX39xk43-0-80fee228a5e0f21b122b63485858512d)
图2-19 直方图
6. 绘制多个直方图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P63_38792.jpg?sign=1738843625-OeUxXT7HYNHAJLEIl1xkPf7DhLPNgQlU-0-041331b2c9c9dff7d54e4f5c54b328e7)
运行结果如图2-20所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P63_38793.jpg?sign=1738843625-uZAWZhRj8dde5gm1o54FDx5wZmtALRap-0-9548513d32c9a971364c00cb700b1b29)
图2-20 多个直方图
7. 绘制箱形图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P64_38796.jpg?sign=1738843625-ji5HoeA5DNUhi5PfZBYflIG3NCkVNCJe-0-c13521157359c06a0078a57a1e41f6d1)
运行结果如图2-21所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P64_38795.jpg?sign=1738843625-YNIw9Y4O4tKdkt1xrJq6ojpQVHvkYlXw-0-fb2ffd7eaebacbe2d7ff383569f50fe3)
图2-21 箱形图
8. 绘制区域块图形
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P64_38794.jpg?sign=1738843625-TI6cGrqQ6eHTWNRSKqsSmI2Zr1YIx5qf-0-c2756b6e35e8eb4ec03c7bfb53966b26)
运行结果如图2-22所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P65_10167.jpg?sign=1738843625-Edhh6sysmXclvpj9XUBNh4VpjW0qYCiT-0-42468ed536c7a56ec0897853ad5769d5)
图2-22 区域块图形
9. 绘制散点图形
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P65_38797.jpg?sign=1738843625-687TCbvz8sRJrCcpYlu4VxQcxpVbNygd-0-561ae4bb565504c3626895754b940a45)
运行结果如图2-23所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P65_38799.jpg?sign=1738843625-kg7AAg7mrfEXjzlFznX0YdfKE4C6duw6-0-3983c77a4624d17a347241b83a1cb827)
图2-23 散点图形
10. 绘制饼状图
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P66_38800.jpg?sign=1738843625-u7O45QGRgza4AtWYdFyaJRGRO6v6JH81-0-c668e3b6f3bf5731c52975daa5742dbb)
运行结果如图2-24所示。
![](https://epubservercos.yuewen.com/FBFBF6/15825992205221306/epubprivate/OEBPS/Images/Figure-P66_38802.jpg?sign=1738843625-rNqr4Tvij7KHKInLnh3wuSIc8SRDKAjr-0-9607f42e476ce7c5d512409147ce2394)
图2-24 饼状图