如何在python 3中安装pandas包,并且使用数据结构

・1 分钟阅读

介绍

Python pandas软件包用于数据处理和分析,旨在让你以更直观的方式处理带标签的数据或关系数据。

pandas构建在numpy包上,它包括标签,描述性索引,在处理常见数据格式和缺失数据方面特别健壮。

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

安装pandas

其他python包一样,我们可以使用pip安装pandas


pip install pandas numpy python-dateutil pytz

你应该接收类似以下内容的输出:


OutputSuccessfully installed pandas-0.19.2

如果希望在Anaconda中安装pandas,则可以使用以下命令进行安装:


conda install pandas

至此,你已经准备好开始使用pandas包了。

系列

pandas中,序列(Series)是一个可以保存Data Type ,轴标签被统称为索引。


python

从解释器中,将numpypandas软件包导入到你的命名空间中:


import numpy as np
import pandas as pd

在使用系列之前,先来看看它通常是什么样的:


s = pd.Series([data], index=[index])

你注意到,数据的结构类似于python 列表

不声明索引

我们输入整数数据,然后为该系列提供一个名称参数,但是我们避免使用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中。

声明索引

如上面的语法所示,可以使用显式索引进行序列化,


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

请注意,在最后一个例子中,使用索引命名时,两个参数是包含的,而不是独占的。

quit()退出python解释器。

用字典初始化的序列

使用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中的系列。

DataFrames

DataFrames是带有标签的二维数据结构,具有可以由不同数据类型组成的列。

DataFrames与电子表格或SQL表类似,通常,在使用pandas时,DataFrames将是你将使用的最常见的对象。

为了理解pandas DataFrame如何工作,设置两个系列,然后将它们传递到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系列的下面,在我们的示例中,这两个Series都具有相同的索引标签,但是如果Series具有不同的标签,则缺少的值将被标记为NaN。

要查看DataFrame的外观,让我们调用print打印它。

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布尔参数,它可以是TrueFalse

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()函数从pandas中收集它。

DataFrame.describe()函数将提供以下有关数值数据类型的信息,而不传递特定参数:

count 频率计数;发生的次数
mean 平均值
std 标准偏差,一个数值,用来表示数据的变化程度
min 集合中的最小值或最小值
25% 25%
50% 50%
75% 75%
max 集合中的最大值或最大值

让python用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.fillna()函数,这将确保你在启动时不会遇到问题。

创建一个名为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中缺少的值。

结束语

本教程介绍了使用python 3 pandas进行数据分析的介绍,你现在应该安装了pandas,并且会使用pandas中的序列(Series)和DataFrames数据结构了。

讨论
Yangchunyan110 profile image