介绍

Python pandas包用于数据操作和分析,旨在让您以更直观的方式使用带标签或关系数据。

建立在numpy包上,pandas包括标签,描述性索引,并且在处理常见的数据格式和缺少的数据方面特别强大。

pandas包提供了电子表格功能,但使用Python比使用电子表格更快地处理数据,并且pandas被证明是非常有效的。

在本教程中,我们将首先安装pandas,然后使用基本数据结构: Series和DataFrames 。

安装pandas

像其他Python包一样,我们可以用pip安装pip 。

首先,让我们进入我们的本地编程环境或基于服务器的编程环境 ,并安装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 列表 。

没有声明索引

我们将输入整数数据,然后为Series提供一个名称参数,但我们将避免使用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'])

在构建系列时,让我们调用它来查看输出:

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

请注意,在最后一个示例中,当使用索引名称进行切片时,这两个参数是包含的,而不是排除的。

让我们退出Python解释器与quit() 。

系列用词典初始化

使用pandas我们也可以使用字典数据类型来初始化一个系列。这样,我们不会将索引声明为单独的列表,而是使用内置键作为索引。

让我们创建一个名为ocean.py的文件,并添加以下字典并打印它。

ocean.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字典一样工作,您可以通过调用键访问值,我们可以这样做:

ocean_depth.py
...
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output3741
Atlantic 3646
Indian 3741
dtype: int64

但是,这些系列现在是Python对象,因此您将无法使用字典函数。

Python字典提供了另一种形式来在pandas中设置Series。

DataFrames

DataFrames是具有可以由不同数据类型组成的列的2维标记数据结构。

DataFrames类似于电子表格或SQL表。一般来说,当你使用pandas时,DataFrames将是你将使用的最常见的对象。

要了解pandas DataFrame的工作原理,让我们设置两个Series,然后将它们传递给DataFrame。第一个系列将是我们之前的avg_ocean_depth系列,我们的第二个系列将是max_ocean_depth ,其中包含地球上每个海洋的最大深度的数据,以米为单位。

ocean.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是什么样子,让我们发出一个打印它的调用。

ocean.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

输出显示两个列标题以及每个列下的数字数据,字典键的标签位于左侧。

在DataFrames中对数据排序

我们可以使用DataFrame.sort_values(by=...)函数对DataFrame中的数据进行排序 。

例如,让我们使用ascending Boolean参数,它可以是True或False 。 注意, ascending是我们可以传递给函数的参数,但是降序不是。

ocean_depth.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

现在,输出显示最左侧整数列中从低值升高到高值的数字。

使用DataFrames进行统计分析

接下来,让我们看看我们可以使用DataFrame.describe()函数从DataFrame.describe()收集的一些摘要统计信息 。

在不传递特定参数的情况下, DataFrame.describe()函数将为数值数据类型提供以下信息:

返回

这是什么意思

count

频率计数;事情发生的次数

mean

平均值或平均值

std

标准偏差,用于表示数据变化范围的数值

min

集合中的最小或最小数字

25%

第25百分位数

50%

第50百分位数

75%

75百分位数

max

集合中的最大或最大数字

让我们通过用describe()函数调用我们的ocean_depths DataFrame来为我们打印出这些统计数据:

ocean.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.dropna()函数填充缺失的值 。这将确保你不会遇到问题,因为你开始。

让我们创建一个名为user_data.py的新文件,并用一些缺少值的数据填充它,并将其转换为DataFrame:

user_data.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)

我们打印的调用在我们运行程序时向我们显示以下输出:

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()删除缺失的值。

user_data.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)实现。

删除或注释掉我们添加到文件中的最后两行,并添加以下内容:

user_data.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数据结构。