分享

数据科学必备Python使用Pandas方法汇总

 网摘文苑 2022-11-27 发布于北京

Pandas 是 Python 进行数据分析的基础包,基于 NumPy 构建,该工具是为了解决数据分析任务而创建的。

Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。

Pandas 提供了大量能使我们快速便捷地处理数据的函数和方法,它是使Python成为强大而高效的数据分析环境的重要因素之一。

数据科学必备Python使用Pandas方法汇总

Pandas 对象

Pandas 本身的内容比较多,和 NumPy 的 关联也非常紧密。在这里我们主要讲常用的两个数据结构( DataFrame 和 Series )和相应的常用方法属性等。

在 Pandas 的数据结构中,数据对齐是内在的。标签(即索引)和数据之间的链接不会被破坏,除非显式地进行相关的操作。

import numpy as npimport pandas as pd
数据科学必备Python使用Pandas方法汇总

创建Series

Series数据结构是一种类似于一维数组的对象,是由一组数据(各种Numpy数据类型)以及一组与之相关的标签(即索引)组成。

多数情况下,Series数据结构是我们直接从DataFrame数据结构中截取出来的,但也可以自己创建Series。语法如下:

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

其中data可以是不同的内容:

  • 字典
  • ndarray
  • 标量

index 是轴标签列表,根据不同的情况传入的内容有所不同。

由ndarray构建

如果data是ndarray,则索引的长度必须与数据相同。如果没有入索引,将创建一个值为[0,...,len(data)-1]的索引。

# 字典创建组ser = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])sera 0.917929b 0.258390c 0.555353d 0.580499e -0.891361dtype: float64ser.indexIndex(['a', 'b', 'c', 'd', 'e'], dtype='object')pd.Series(np.random.randn(5))0 -0.0262951 -2.5755002 -0.1823573 -1.1033604 1.004719dtype: float64

由字典构建

若data是一个dict,如果传递了索引,则索引中与标签对应的数据中的值将被列出。否则,将从dict的排序键构造索引(如果可能)。

d = {'a' : 0., 'b' : 1., 'c' : 2.}pd.Series(d)a    0.0b    1.0c    2.0dtype: float64pd.Series(d, index=['b', 'c', 'd', 'a'])b    1.0c    2.0d    NaNa    0.0dtype: float64

由标量创建

如果数据是标量值,则必须提供索引。将该值重复以匹配索引的长度。

pd.Series(5., index=['a', 'b', 'c', 'd', 'e'])a 5.0b 5.0c 5.0d 5.0e 5.0dtype: float64

除了上述之外,类ndarray的对象传入后也会转换为ndarray来创建Series。

ser = pd.Series([5,4,2,-3,True])ser0       51       42       23      -34    Truedtype: objectser.valuesarray([5, 4, 2, -3, True], dtype=object)ser.indexRangeIndex(start=0, stop=5, step=1)ser2 = pd.Series([5, 4, 2, -3, True], index=['b', 'e', 'c', 'a', 'd'])ser2b       5e       4c       2a      -3d    Truedtype: objectser2.indexIndex(['b', 'e', 'c', 'a', 'd'], dtype='object')ser2.valuesarray([5, 4, 2, -3, True], dtype=object)

Series 是 ndarray-like

Series与ndarray非常相似,是大多数NumPy函数的有效参数。包括像切片这样的索引操作。

ser = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])sera -0.169449b 1.007466c -1.107287d -2.565809e 2.447240dtype: float64ser[0]-0.16944855423652594ser[:3]a -0.169449b 1.007466c -1.107287dtype: float64ser[ser > 0]b 1.007466e 2.447240dtype: float64ser[ser > ser.median()]b 1.007466e 2.447240dtype: float64ser[[4, 3, 1]]e 2.447240d -2.565809b 1.007466dtype: float64np.exp(ser)a 0.844130b 2.738652c 0.330454d 0.076857e 11.556404dtype: float64

Series 是 dict-like

Series同时也像一个固定大小的dict,可以通过索引标签获取和设置值。

ser['a']-0.16944855423652594ser['e'] = 12.sera    -0.169449b     1.007466c    -1.107287d    -2.565809e    12.000000dtype: float64'e' in serTrue'f' in serFalse

如果引用了未包含的标签,则会引发异常:使用get方法,未包含的索引则会返回None,或者特定值。和dict的操作类似。

print(ser.get('f'))Noneser.get('f', np.nan)nan

矢量化操作&标签对齐

在进行数据分析时,通常没必要去使用循环,而是使用矢量化的操作方式。

ser + sera    -0.338897b     2.014931c    -2.214573d    -5.131617e    24.000000dtype: float64ser * 2a    -0.338897b     2.014931c    -2.214573d    -5.131617e    24.000000dtype: float64np.exp(ser)a         0.844130b         2.738652c         0.330454d         0.076857e    162754.791419dtype: float64

Series和ndarray之间的一个主要区别是,Series之间的操作会自动对齐基于标签的数据。

ser[1:] + ser[:-1]a NaNb 2.014931c -2.214573d -5.131617e NaNdtype: float64

未对齐Series之间的操作结果将包含所涉及的索引的并集。如果在其中一个Seires中找不到标签,结果将被标记为NaN。

注意:通常不同索引对象之间的操作的默认结果产生索引的并集,以避免信息丢失。

因为尽管数据丢失,但拥有索引标签也可以作为计算的重要信息。当然也可以选择通过dropna功能删除丢失数据的标签。

属性

名称属性。

s = pd.Series(np.random.randn(5), name='something')s0    0.5084071    0.3372922   -1.7799373   -1.8360194    0.534154Name: something, dtype: float64s.name'something'

在多数情况下,series名称会被自动分配,例如在获取1D切片的DataFrame时。这里需要注意的是,s和s2是指向不同的对象的。

s2 = s.rename('different')s20 0.5084071 0.3372922 -1.7799373 -1.8360194 0.534154Name: different, dtype: float64

通过索引属性获取索引。

s.indexRangeIndex(start=0, stop=5, step=1)

索引对象也有一个name属性。

s.index.name = 'index_name'sindex_name0 0.5084071 0.3372922 -1.7799373 -1.8360194 0.534154Name: something, dtype: float64

通过值索引获取值。

s.valuesarray([ 0.50840653,  0.33729169, -1.77993701, -1.83601925,  0.53415447])
数据科学必备Python使用Pandas方法汇总

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多