如何在Python3中安装pandas包并使用数据结构
介绍
Python pandas
包用于数据操作和分析,旨在让您以更直观的方式处理标记或关系数据。
pandas
基于 numpy
包构建,包括标签、描述性索引,并且在处理常见数据格式和缺失数据方面特别健壮。
pandas
包提供电子表格功能,但使用 Python 处理数据比使用电子表格要快得多,并且 pandas
被证明是非常有效的。
在本教程中,我们将首先安装 pandas
,然后让您了解基本数据结构:Series 和 DataFrames。
安装 pandas
与其他 Python 包一样,我们可以使用 pip
安装 pandas
。
首先,让我们进入我们选择的 本地编程环境 或 基于服务器的编程环境 并在那里安装 pandas
及其依赖项:
pip install pandas numpy python-dateutil pytz
您应该会收到类似于以下内容的输出:
OutputSuccessfully installed pandas-0.19.2
如果您更喜欢在 Anaconda 中安装 pandas
,可以使用以下命令进行安装:
conda install pandas
此时,您已准备好开始使用 pandas
包。
系列
在 pandas
中,Series 是一维数组,可以保存任何 数据类型 。 轴标签统称为 索引 。
让我们在命令行中启动 Python 解释器,如下所示:
python
在解释器中,将 numpy
和 pandas
包导入到您的命名空间中:
import numpy as np import pandas as pd
在我们使用 Series 之前,让我们看一下它的一般外观:
s = pd.Series([data], index=[index])
您可能会注意到数据的结构类似于 Python list。
不声明索引
我们将输入整数数据,然后为系列提供名称参数,但我们将避免使用 index
参数来查看 pandas
如何隐式填充它:
s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')
现在,让我们调用系列,这样我们就可以看到 pandas
用它做了什么:
s
我们将看到以下输出,左列中的索引,右列中的数据值。 列下方是有关系列名称和构成值的数据类型的信息。
Output0 0 1 1 2 4 3 9 4 16 5 25 Name: Squares, dtype: int64
虽然我们没有为数组提供索引,但隐含地添加了整数值 0
到 5
。
声明索引
正如上面的语法向我们展示的那样,我们也可以使用显式索引来制作 Series。 我们将使用有关地球海洋平均深度的数据:
avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic', 'Atlantic', 'Indian', 'Pacific', 'Southern'])
构建完 Series 后,我们调用它来查看输出:
avg_ocean_depth
OutputArctic 1205 Atlantic 3646 Indian 3741 Pacific 4080 Southern 3270 dtype: int64
我们可以看到我们提供的索引在左侧,而值在右侧。
索引和切片系列
使用 pandas
系列我们可以按相应的数字索引来检索值:
avg_ocean_depth[2]
Output3741
我们还可以按索引号切片来检索值:
avg_ocean_depth[2:4]
OutputIndian 3741 Pacific 4080 dtype: int64
此外,我们可以调用索引的值来返回它对应的值:
avg_ocean_depth['Indian']
Output3741
我们还可以对索引的值进行切片以返回相应的值:
avg_ocean_depth['Indian':'Southern']
OutputIndian 3741 Pacific 4080 Southern 3270 dtype: int64
请注意,在最后一个示例中,当使用索引名称进行切片时,这两个参数是包含的而不是排除的。
让我们用 quit()
退出 Python 解释器。
用字典初始化的系列
使用 pandas
我们还可以使用 dictionary 数据类型来初始化一个系列。 这样,我们不会将索引声明为单独的列表,而是使用内置键作为索引。
让我们创建一个名为 ocean.py
的文件并添加以下字典并调用以打印它。
海洋.py
import numpy as np import pandas as pd avg_ocean_depth = pd.Series({ 'Arctic': 1205, 'Atlantic': 3646, 'Indian': 3741, 'Pacific': 4080, 'Southern': 3270 }) print(avg_ocean_depth)
现在我们可以在命令行上运行该文件:
python ocean.py
我们将收到以下输出:
OutputArctic 1205 Atlantic 3646 Indian 3741 Pacific 4080 Southern 3270 dtype: int64
系列以有组织的方式显示,左侧是索引(由我们的键组成),右侧是一组值。
这将像其他 Python 字典一样,您可以通过调用键来访问值,我们可以这样做:
海洋深度.py
... print(avg_ocean_depth['Indian']) print(avg_ocean_depth['Atlantic':'Indian'])
Output3741 Atlantic 3646 Indian 3741 dtype: int64
但是,这些 Series 现在是 Python 对象,因此您将无法使用字典函数。
Python 字典提供了另一种形式来设置 pandas
中的系列。
数据帧
DataFrames 是二维标记数据结构,其列可能由不同的数据类型组成。
DataFrame 类似于电子表格或 SQL 表。 通常,当您使用 pandas
时,DataFrames 将是您最常用的对象。
要了解 pandas
DataFrame 的工作原理,让我们设置两个 Series,然后将它们传递到 DataFrame 中。 第一个系列将是我们之前的 avg_ocean_depth
系列,我们的第二个将是 max_ocean_depth
,其中包含地球上每个海洋的最大深度(以米为单位)的数据。
海洋.py
import numpy as np import pandas as pd avg_ocean_depth = pd.Series({ 'Arctic': 1205, 'Atlantic': 3646, 'Indian': 3741, 'Pacific': 4080, 'Southern': 3270 }) max_ocean_depth = pd.Series({ 'Arctic': 5567, 'Atlantic': 8486, 'Indian': 7906, 'Pacific': 10803, 'Southern': 7075 })
设置好这两个系列后,让我们将 DataFrame 添加到文件底部,在 max_ocean_depth
系列下方。 在我们的示例中,这两个系列具有相同的索引标签,但如果您的系列具有不同的标签,那么缺失值将被标记为 NaN
。
这是以我们可以包含列标签的方式构建的,我们将其声明为系列变量的键。 要查看 DataFrame 的样子,让我们发出一个调用来打印它。
海洋.py
... max_ocean_depth = pd.Series({ 'Arctic': 5567, 'Atlantic': 8486, 'Indian': 7906, 'Pacific': 10803, 'Southern': 7075 }) ocean_depths = pd.DataFrame({ 'Avg. Depth (m)': avg_ocean_depth, 'Max. Depth (m)': max_ocean_depth }) print(ocean_depths)
Output Avg. Depth (m) Max. Depth (m) Arctic 1205 5567 Atlantic 3646 8486 Indian 3741 7906 Pacific 4080 10803 Southern 3270 7075
输出显示我们的两个列标题以及每个列下的数字数据,字典键的标签在左侧。
对 DataFrame 中的数据进行排序
我们可以使用 DataFrame.sort_values(by=...)
函数对 DataFrame 中的数据进行 排序。
例如,让我们使用 ascending
布尔参数,它可以是 True
或 False
。 请注意,ascending
是我们可以传递给函数的参数,但降序不是。
海洋深度.py
... print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output Avg. Depth (m) Max. Depth (m) Arctic 1205 5567 Southern 3270 7075 Atlantic 3646 8486 Indian 3741 7906 Pacific 4080 10803
现在,输出在最左边的整数列中显示从低值到高值的数字。
使用 DataFrame 进行统计分析
接下来,让我们看一下 一些汇总统计 ,我们可以使用 DataFrame.describe()
函数从 pandas
收集这些统计数据。
在不传递特定参数的情况下,DataFrame.describe()
函数将为数字数据类型提供以下信息:
返回 | 这是什么意思 |
---|---|
count
|
频率计数; 某事发生的次数 |
mean
|
平均值或平均值 |
std
|
标准差,一个数值,用于指示数据变化的范围 |
min
|
集合中的最小或最小数 |
25%
|
第 25 个百分位 |
50%
|
第 50 个百分位 |
75%
|
第 75 个百分位 |
max
|
集合中的最大或最大数 |
让 Python 通过使用 describe()
函数调用我们的 ocean_depths
DataFrame 为我们打印出这些统计数据:
海洋.py
... print(ocean_depths.describe())
当我们运行这个程序时,我们将收到以下输出:
Output Avg. Depth (m) Max. Depth (m) count 5.000000 5.000000 mean 3188.400000 7967.400000 std 1145.671113 1928.188347 min 1205.000000 5567.000000 25% 3270.000000 7075.000000 50% 3646.000000 7906.000000 75% 3741.000000 8486.000000 max 4080.000000 10803.000000
现在,您可以将此处的输出与原始 DataFrame 进行比较,并更好地了解地球海洋的平均深度和最大深度(将其视为一个组)。
处理缺失值
通常在处理数据时,您会缺少值。 pandas
包为 处理缺失数据 提供了许多不同的方法,它指的是 null
数据,或者由于某种原因不存在的数据。 在 pandas
中,这称为 NA 数据并呈现为 NaN
。
我们将讨论 使用 DataFrame.dropna()
函数删除缺失值 以及使用 DataFrame.fillna()
函数填充缺失值 的。 这将确保您在开始时不会遇到问题。
让我们创建一个名为 user_data.py
的新文件,并用一些缺失值的数据填充它,并将其转换为 DataFrame:
用户数据.py
import numpy as np import pandas as pd user_data = {'first_name': ['Sammy', 'Jesse', np.nan, 'Jamie'], 'last_name': ['Shark', 'Octopus', np.nan, 'Mantis shrimp'], 'online': [True, np.nan, False, True], 'followers': [987, 432, 321, np.nan]} df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers']) print(df)
当我们运行程序时,我们的 print 调用向我们显示以下输出:
Output first_name last_name online followers 0 Sammy Shark True 987.0 1 Jesse Octopus NaN 432.0 2 NaN NaN False 321.0 3 Jamie Mantis shrimp True NaN
这里有很多缺失值。
让我们首先用 dropna()
删除缺失值。
用户数据.py
... df_drop_missing = df.dropna() print(df_drop_missing)
由于在我们的小数据集中只有一行没有任何值丢失,所以这是我们运行程序时唯一保持完整的行:
Output first_name last_name online followers 0 Sammy Shark True 987.0
作为删除值的替代方法,我们可以用我们选择的值填充缺失值,例如 0
。 我们将通过 DataFrame.fillna(0)
实现这一点。
删除或注释掉我们添加到文件中的最后两行,并添加以下内容:
用户数据.py
... df_fill = df.fillna(0) print(df_fill)
当我们运行程序时,我们将收到以下输出:
Output first_name last_name online followers 0 Sammy Shark True 987.0 1 Jesse Octopus 0 432.0 2 0 0 False 321.0 3 Jamie Mantis shrimp True 0.0
现在我们所有的列和行都完好无损,而不是将 NaN
作为我们的值,我们现在有 0
填充这些空间。 您会注意到在适当的时候使用了浮点数。
此时,您可以对数据进行排序、进行统计分析以及处理 DataFrames 中的缺失值。
结论
本教程介绍了使用 pandas
和 Python 3 进行数据分析的介绍性信息。 您现在应该已经安装了 pandas
,并且可以使用 pandas
中的 Series 和 DataFrames 数据结构。