如何在Python 3中安装pandas包和使用数据结构

介绍

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

基于numpy软件包构建,pandas包括标签,描述性索引,在处理常见数据格式和丢失数据方面特别强大。

pandas软件包提供了电子表格功能,但使用Python处理数据要比使用电子表格快得多,并且证明pandas非常有效。

在本教程中,我们将首先安装pandas,然后让您了解基础数据结构:SeriesDataFrames

安装 pandas

同其它Python包,我们可以使用pip安装pandas

首先,让我们进入我们选择的本地编程环境或基于服务器的编程环境,并在那里安装pandas和它的依赖项:

pip install pandas numpy python-dateutil pytz

您应该收到类似于以下内容的输出:

Successfully installed pandas-0.19.2

如果您希望pandas在Anaconda中安装,可以使用以下命令执行此操作:

conda install pandas

此时,您已经准备好开始使用pandas软件包了。

Series

pandas,Series是一维数组,可以容纳任何数据类型。轴标签统称为索引

让我们在命令行中启动Python解释器,如下所示:

python

在解释器中,将numpypandas包导入您的命名空间:

import numpy as np
import pandas as pd

在我们使用Series之前,让我们来看看它通常是什么样的:

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

您可能会注意到数据的结构类似于Python 列表。

没有声明索引

我们将输入整数数据,然后为Series提供name参数,但我们将避免使用index参数来查看pandas如何隐式填充它:

s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')

现在,让我们打电话给系列,这样我们就可以看到pandas的作用:

s

我们将看到以下输出,左列中的索引,右列中的数据值。列下方是有关系列名称和组成值的数据类型的信息。

0     0
1     1
2     4
3     9
4    16
5    25
Name: Squares, dtype: int64

虽然我们没有提供数组的索引,有一个隐含加入的整数值的05

声明索引

正如上面的语法向我们展示的那样,我们也可以使用显式索引创建Series。我们将使用有关地球海洋平均深度的数据:

avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic',  'Atlantic', 'Indian', 'Pacific', 'Southern'])

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

avg_ocean_depth
Arctic      1205
Atlantic    3646
Indian      3741
Pacific     4080
Southern    3270
dtype: int64

我们可以看到我们提供的索引在左侧,右侧是值。

索引和切片系列

使用pandasSeries,我们可以通过相应的数字索引来检索值:

avg_ocean_depth[2]
3741

我们还可以按索引号切片来检索值:

avg_ocean_depth[2:4]
Indian     3741
Pacific    4080
dtype: int64

另外,我们可以调用索引的值来返回它对应的值:

avg_ocean_depth['Indian']
3741

我们还可以使用索引的值进行切片以返回相应的值:

avg_ocean_depth['Indian':'Southern']
Indian      3741
Pacific     4080
Southern    3270
dtype: int64

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

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

用字典初始化的系列

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

让我们创建一个名为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字典一样,您可以通过调用键来访问值,我们可以这样做:

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

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

Python词典提供了另一种表单来在pandas中设置Series。

DataFrames

DataFrame是二维标记的数据结构,其具有可由不同数据类型组成的列。

DataFrame类似于电子表格或SQL表。通常,在使用pandasDataFrame 时,DataFrames将是您将使用的最常用对象。

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

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,则会标记缺失值NaN

这是以我们可以包含列标签的方式构造的,我们将其声明为Series'变量的键。要查看DataFrame的外观,让我们发出一个打印它的调用。

...
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)
         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布尔参数,该参数可以是TrueFalse。注意,ascending是我们可以传递给函数的参数,但descending不是。

...
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
          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

集合中的最大或最大数字

让我们通过使用describe()函数调用我们的ocean_depthsDataFrame 让Python打印出这个统计数据:

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

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)

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

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

...
df_drop_missing = df.dropna()
​
print(df_drop_missing)

由于在我们的小数据集中只有一行没有任何值丢失,因此在运行程序时,这是唯一保持完整的行:

  first_name last_name online  followers
0      Sammy     Shark   True      987.0

作为删除值的替代方法,我们可以使用我们选择的值填充缺失值,例如0。这个我们将使用DataFrame.fillna(0)实现。

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

...
df_fill = df.fillna(0)
​
print(df_fill)

当我们运行程序时,我们将收到以下输出:

  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填充了这些空格。您会注意到在适当的时候使用浮动。

此时,您可以对数据进行排序,进行统计分析以及处理DataFrame中的缺失值。

结论

本教程介绍了使用pandasPython 3 进行数据分析的介绍性信息。您现在应该已经安装pandas,并且可以使用pandas中的Series和DataFrames数据结构。

想要了解更多关于安装pandas包和使用数据结构的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Install the pandas Package and Work with Data Structures in Python 3》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

重要 : 优化flink的四种方式

flink这个框架在逐步变为流处理的主流。本文,我们将针对flink性能调优讲四种不同的方法。

3762
来自专栏数据之美

BloomFilter 简介及在 Hadoop reduce side join 中的应用

1、BloomFilter能解决什么问题?      以少量的内存空间判断一个元素是否属于这个集合, 代价是有一定的错误率 2、工作原理 ...

2437
来自专栏程序员宝库

移除注释的完善思路:真的可以用正则实现?

网上有很多自称能实现移除JS注释的正则表达式,实际上存在种种缺陷。这使人多少有些愕然,也不禁疑惑到:真的可以用正则实现吗?而本篇文章以使用正则移除JS注释为目标...

1313
来自专栏Java架构沉思录

谈谈Java中常见的线程安全模型

多线程编程一直是老生常谈的问题,在Java中,随着JDK的逐渐发展,JDK提供给我们的并发模型也越来越多,本文摘取三例使用不同原理的模型,分析其大致原理。

1252
来自专栏北京马哥教育

Python 中被忽略的 else

1424
来自专栏Albert陈凯

Spark详解03Job 物理执行图Job 物理执行图

Job 物理执行图 在 Overview 里我们初步介绍了 DAG 型的物理执行图,里面包含 stages 和 tasks。这一章主要解决的问题是: 给定 jo...

3217
来自专栏Java进阶架构师

一文读懂JDK7,8,JD9的hashmap,hashtable,concurrenthashmap及他们的区别

图中,紫色部分即代表哈希表,也称为哈希数组(默认数组大小是16,每对key-value键值对其实是存在map的内部类entry里的),数组的每个元素...

893
来自专栏个人分享

Spark常用函数(源码阅读六)

  源码层面整理下我们常用的操作RDD数据处理与分析的函数,从而能更好的应用于工作中。

992
来自专栏Python数据科学

妈妈再也不用担心我忘记pandas操作了

pandas的操作上千种,但对于数据分析的使用掌握常用的操作就可以应付了,更多的操作可以参考pandas官网。

951
来自专栏数据小魔方

Julia语言初体验

最近MIT发布的julia 1.0.0版,据传整合了C、Python、R等诸多语言特色,是数据科学领域又一把顶级利器。

2.4K2

扫码关注云+社区

领取腾讯云代金券