pandas教程(一)Series与DataFrame
发布日期:2021-07-01 04:21:17 浏览次数:3 分类:技术文章

本文共 5286 字,大约阅读时间需要 17 分钟。

前言

如何学习:先随着小编看一下几个重要的函数方法,然后用实例加以巩固

预备知识:NumPy数组是一个多维数组对象,称为ndarray。其由两部分组成:实际的数据、描述这些数据的元数据

此外小编为你准备了:

开始使用pandas,你需要熟悉它的两个重要的数据结构: 

Series:是一个值的序列,它只有一个列,以及索引。

DataFrame:是有多个列的数据表,每个列拥有一个 label,当然,DataFrame 也有索引。

首先我们导入包:

In [1]: from pandas import Series, DataFrameIn [2]: import pandas as pd

下面我们将详细介绍Series、DataFrame这俩个部分

一、Series

Series是一个一维的类似的数组对象,包含一个数组的数据(任何NumPy的数据类型)和一个与数组关联的数据标签,被叫做 索引 。最简单的Series是由一个数组的数据构成:

In [3]: obj = Series([4, 7, -5, 3])In [4]: objOut[4]:0    41    72   -53    3dtype: int64

通常,需要创建一个带有索引来确定没一个数据点的Series:

In [5]: obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])In [6]: obj2Out[6]:d    4b    7a   -5c    3dtype: int64In [7]: obj2.indexOut[7]: Index(['d', 'b', 'a', 'c'], dtype='object')

与正规的NumPy数组相比,你可以使用索引里的值来选择一个单一值或一个值集:

In [8]: obj2['a']Out[8]: -5In [9]: obj2['d'] = 6In [10]: obj2[['c', 'a', 'd']]Out[10]:c    3a   -5d    6dtype: int64

我们也可以对Series进行一些处理,然后,再进行输出:

In [11]: obj2Out[11]:d    6b    7a   -5c    3dtype: int64In [12]: obj2[obj2 > 0]Out[12]:d    6b    7c    3dtype: int64In [13]: obj2 * 2Out[13]:d    12b    14a   -10c     6dtype: int64

另一种思考的方式是,Series是一个定长的,有序的字典,因为它把索引和值映射起来了。它可以适用于许多期望一个字典的函数:

In [14]: 'b' in obj2Out[14]: TrueIn [15]: 'e' in obj2Out[15]: False

如果你有一些数据在一个Python字典中,你可以通过传递字典来从这些数据创建一个Series:

In [16]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}In [17]: obj3 = Series(sdata)In [18]: obj3Out[18]:Ohio      35000Oregon    16000Texas     71000Utah       5000dtype: int64

只传递一个字典的时候,结果Series中的索引将是排序后的字典的键:

In [19]: states = ['California', 'Ohio', 'Oregon', 'Texas']In [20]: obj4 = Series(sdata, index=states)In [21]: obj4Out[21]:California        NaNOhio          35000.0Oregon        16000.0Texas         71000.0dtype: float64

在这种情况下, sdata 中的3个值被放在了合适的位置,但因为没有发现对应于 ‘California’ 的值,就出现了 NaN (不是一个数),这在pandas中被用来标记数据缺失或 NA 值。在pandas中用函数 isnull 和 notnull 来检测数据丢失:

In [22]: pd.isnull(obj4)Out[22]:California     TrueOhio          FalseOregon        FalseTexas         Falsedtype: boolIn [23]: pd.notnull(obj4)Out[23]:California    FalseOhio           TrueOregon         TrueTexas          Truedtype: bool
Series的索引可以通过赋值就地更改:
In [24]: obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']In [25]: objOut[25]:Bob      4Steve    7Jeff    -5Ryan     3dtype: int64

二、DataFrame

一个Datarame表示一个表格,类似电子表格的数据结构,包含一个经过排序的列表集,它们每一个都可以有不同的类型值(数字,字符串,布尔等等)。Datarame有行和列的索引;它可以被看作是一个Series的字典(每个Series共享一个索引)。与其它你以前使用过的(如 R 的 data.frame )类似Datarame的结构相比,在DataFrame里的面向行和面向列的操作大致是对称的。在底层,数据是作为一个或多个二维数组存储的,而不是列表,字典,或其它一维的数组集合。

直接指定列数据来创建DataFrame

In [1]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],    ...: 'year': [2000, 2001, 2002, 2001, 2002],    ...: 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}In [2]: DataFrame(data)Out[2]:   pop   state  year0  1.5    Ohio  20001  1.7    Ohio  20012  3.6    Ohio  20023  2.4  Nevada  20014  2.9  Nevada  2002

以Series数组来创建DataFrame

这两种创建方法的不同之处在于:第一种方法创建的DataFrame的列(column)的数据类型是相同的,第二种方法创建的DataFramed的行(row)的数据类型是相同的。

设置DataFrame列的排列顺序:

In [3]: DataFrame(data, columns=['year', 'state', 'pop'])Out[3]:   year   state  pop0  2000    Ohio  1.51  2001    Ohio  1.72  2002    Ohio  3.63  2001  Nevada  2.44  2002  Nevada  2.9

和Series一样,如果你传递了一个行,但不包括在 data 中,在结果中它会表示为NAN值:

In [4]: frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'],    ...: index=['one', 'two', 'three', 'four', 'five'])In [5]: frame2Out[5]:       year   state  pop debtone    2000    Ohio  1.5  NaNtwo    2001    Ohio  1.7  NaNthree  2002    Ohio  3.6  NaNfour   2001  Nevada  2.4  NaNfive   2002  Nevada  2.9  NaNIn [6]: frame2.columnsOut[6]: Index(['year', 'state', 'pop', 'debt'], dtype='object')

和Series一样,在DataFrame中的一列可以通过字典记法或属性来检索:

In [7]: frame2['state']Out[7]:one        Ohiotwo        Ohiothree      Ohiofour     Nevadafive     NevadaName: state, dtype: objectIn [8]: frame2.yearOut[8]:one      2000two      2001three    2002four     2001five     2002Name: year, dtype: int64

列可以通过赋值来修改。例如,空的 ‘debt’ 列可以通过一个纯量或一个数组来赋值:

In [9]: frame2['debt'] = 16.5In [10]: frame2Out[10]:       year   state  pop  debtone    2000    Ohio  1.5  16.5two    2001    Ohio  1.7  16.5three  2002    Ohio  3.6  16.5four   2001  Nevada  2.4  16.5five   2002  Nevada  2.9  16.5In [11]: frame2['debt'] = np.arange(5.)In [12]: frame2Out[12]:       year   state  pop  debtone    2000    Ohio  1.5   0.0two    2001    Ohio  1.7   1.0three  2002    Ohio  3.6   2.0four   2001  Nevada  2.4   3.0five   2002  Nevada  2.9   4.0

通过列表或数组给一列赋值时,所赋的值的长度必须和DataFrame的长度相匹配。如果你使用Series来赋值,它会代替在DataFrame中精确匹配的索引的值,Series没有的数据在DataFrame中就会被更新为NaN:

In [13]: val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])In [14]: frame2['debt'] = valIn [15: frame2Out[15]:       year   state  pop  debtone    2000    Ohio  1.5   NaNtwo    2001    Ohio  1.7  -1.2three  2002    Ohio  3.6   NaNfour   2001  Nevada  2.4  -1.5five   2002  Nevada  2.9  -1.7

给一个不存在的列赋值,将会创建一个新的列。 像字典一样 del 关键字将会删除列:

In [16]: frame2['eastern'] = frame2.state = 'Ohio'In [17]: frame2Out[17]:       year state  pop  debt easternone    2000  Ohio  1.5   NaN    Ohiotwo    2001  Ohio  1.7  -1.2    Ohiothree  2002  Ohio  3.6   NaN    Ohiofour   2001  Ohio  2.4  -1.5    Ohiofive   2002  Ohio  2.9  -1.7    OhioIn [18]: del frame2['eastern']In [19]: frame2.columnsOut[19]: Index(['year', 'state', 'pop', 'debt'], dtype='object')

转载地址:https://mtyjkh.blog.csdn.net/article/details/80286859 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Scrapy框架学习记录
下一篇:Python多线程学习教程

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月16日 01时05分05秒