Pandas 使用教程

这是一篇全面介绍 Pandas 数据处理的教程,涵盖基础到高级内容,包括安装、数据结构(Series 和 DataFrame)的创建、操作、缺失值处理以及时间序列分析。教程详细讲解了如何从字典、ndarray 创建 Series,如何通过 DataFrame 从字典、列表或 ndarrays 转换数据,以及如何进行数据选择、过滤、填充缺失值和插值。此外,还涉及时间序列的 Timestamp 和 DatetimeIndex 的使用,以及时间序列的转换、检索、计算和重采样等操作。
摘要由CSDN通过智能技术生成

Pandas 基础使用教程(1)

Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取、转换、过滤、分析等一系列操作。除此之外,Pandas 拥有强大的缺失数据处理与数据透视功能,可谓是数据预处理中的必备利器。这是 Pandas 使用教程的第 1 章节,将学会安装它,并了解 Pandas 的数据结构。

官方文档

 下载官方文档(英文)

二、Pandas 安装

Linux:

sudo pip install pandas

Windows10:

pip install --upgrade pandas

 

三、 一维数据 Series

Series 是 Pandas 中最基本的 1 维数据形式。其可以储存整数、浮点数、字符串等形式的数据。Series 的新建方法如下:

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

其中,data 可以是字典、numpy 里的 ndarray 对象等。index 是数据索引,索引是 pandas 数据结构中的一大特性,它主要的功能是帮助我们更快速地定位数据,这一点后面会谈到。

3.1 字典 -> Series

将把不同类型的数据转换为为 Series。首先是字典类型。

import pandas as pd

d = {'a' : 10, 'b' : 20, 'c' : 30}

pd.Series(d)

 

这里,数据值是 10, 20, 30,索引为 a, b, c 。我们可以直接通过 index= 参数来设置新的索引。

d = {'a' : 10, 'b' : 20, 'c' : 30}

s = pd.Series(d, index=['b', 'c', 'd', 'a'])

s

 

你会发现,pandas 会自动匹配人为设定的索引值和字典转换过来的索引值。而当索引无对应值时,会显示为 NaN 缺失值。

3.2 ndarray -> Series

ndarray 是著名数值计算包 numpy 中的多维数组。我们也可以将 ndarray 直接转换为 Series。

import numpy as np

data = np.random.randn(5) # 一维随机数
index = ['a', 'b', 'c', 'd', 'e'] # 指定索引

s = pd.Series(data, index)

s

 

上面的两个例子中,我们都指定了 index 的值。而当我们非人为指定索引值时,Pandas 会默认从 0 开始设置索引值。

 

s = pd.Series(data)

s

 

当我们需要从一维数据 Series 中返回某一个值时,可以直接通过索引完成。

 

data = np.random.randn(5) # 一维随机数
index = ['a', 'b', 'c', 'd', 'e'] # 指定索引

s = pd.Series(data, index)
print(s)
print("------输出分割线------")
print(s['a'])

 

除此之外,Series 是可以直接进行运算的。例如:

 

data = np.random.randn(5) # 一维随机数
index = ['a', 'b', 'c', 'd', 'e'] # 指定索引

s = pd.Series(data, index)

print(s)
print("------输出分割线------")
print(2*s)
print("------输出分割线------")
print(s-s)

 

四、二维数据 DataFrame

DataFrame 是 Pandas 中最为常见、最重要且使用频率最高的数据结构。你可以想到它箱型为电子表格或 SQL 表具有的结构。DataFrame 可以被看成是以 Series 组成的字典。它和 Series 的区别在于,不但具有行索引,且具有列索引。

DataFrame 可以用于储存多种类型的输入:

  • 一维数组、列表、字典或者 Series 字典。
  • 二维 numpy.ndarray。
  • 结构化的 ndarray。
  • 一个 Series。
  • 另一个 DataFrame。

4.1 Series 字典 -> DataFrame

 

# 带 Series 的字典
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)  # 新建 DataFrame

df

我们可以看到,这里的行索引为 a, b, c, d ,而列索引为 one, two

4.2 ndarrays 或 lists 字典 -> DataFrame

 

# 列表构成的字典
d = {'one' : [1, 2, 3, 4], 'two' : [4, 3, 2, 1]}

df1 = pd.DataFrame(d) # 未指定索引
df2 = pd.DataFrame(d, index=['a', 'b', 'c', 'd']) # 指定索引

print(df1)
print("------输出分割线------")
print(df2)

 

4.3 带字典的列表 -> DataFrame

 

# 带字典的列表
d = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]

df = pd.DataFrame(d)

df

 

4.4 DataFrame.from_ 方法

pandas 的 DataFrame 下面还有 4 个以 from_ 开头的方法,这也可以用来创建 Dataframe,它们分别是:

  • from_csv()
  • from_dict()
  • from_items()
  • from_records()

 

d = [('A', [1, 2, 3]), ('B', [4, 5, 6])]
c = ['one', 'two', 'three']

df = pd.DataFrame.from_items(d, orient='index', columns=c)

df

 

4.5 列选择,添加,删除

接下来,我们延续上面的 4.4 里面的数据来演示。

在一维数据结构 Series 中,我们用 df['标签'] 来选择行。而到了二维数据 DataFrame 中,df['标签'] 表示选择列了。例如:

 

df['one']

 

删除列的方法为 df.pop('列索引名'),例如:

 

df.pop('one')

df

 

添加列的方法未 df.insert(添加列位置索引序号, '添加列名', 数值),例如:

 

df.insert(2, 'four', [10, 20])

df

 

五、三维数据 Panel

Panel 是 Pandas 中使用频率较低的一种数据结构,但它是三维数据的重要容器。

5.1 面板数据

Panel data 又称面板数据,它是计量经济学中派生出来的一个概念。在计量经济学中,数据大致可分为三类:截面数据,时间序列数据,以及面板数据。而面板数据即是截面数据与时间序列数据综合起来的一种数据类型。

简单来讲,截面数据指在某一时间点收集的不同对象的数据。而时间序列数据是指同一对象在不同时间点所对应的数据集合。

这里引用一个城市和 GDP 关系的示例来解释上面的三个概念(面板数据):

截面数据:

  • 例如城市:北京、上海、重庆、天津在某一年的 GDP 分别为 10、11、9、8(单位亿元)。

时间序列数据:

  • 例如:2000、2001、2002、2003、2004 各年的北京市 GDP 分别为 8、9、10、11、12(单位亿元)。

面板数据:

  • 2000、2001、2002、2003、2004 各年中国所有直辖市的 GDP 分别为(单位亿元): 北京市分别为 8、9、10、11、12; 上海市分别为 9、10、11、12、13; 天津市分别为 5、6、7、8、9; 重庆市分别为 7、8、9、10、11。

5.2 Panel 构成

在 Pandas 中,Panel 主要由三个要素构成:

  • items: 每个项目(item)对应于内部包含的 DataFrame。
  • major_axis: 每个 DataFrame 的索引(行)。
  • minor_axis: 每个 DataFrame 的索引列。

简而言之,在 Pandas 中,一个 Panel 由多个 DataFrame 组成。下面就生成一个 Panel。

wp = pd.Panel(np.random.randn(2, 5, 4), items=['Item1', 'Item2'], major_axis=pd.date_range('1/1/2000', periods=5), minor_axis=['A', 'B', 'C', 'D'])

wp

 

我们可以看到,wp 由 2 个项目、5 个主要轴和 4 个次要轴组成。其中,主要轴由 2000-01-01 到 2000-01-05 这 5 天组成的时间序列,次轴从 A 到 D。

你可以输出 Item1 看一看。

wp['Item1']

 

再看一看 Item2。

wp['Item2']

 

可以看到,这两个 Dataframe 的行索引及列索引是一致的。由于数据是随机生成的,所以不一致。

5.2 Panel 

由于 Panel 在 Pandas 中的使用频率远低于 Series 和 DataFrame,所以 Pandas 决定在未来的版本中将 Panel 移除,转而使用 MultiIndex DataFrame 来表示多维数据结构。

这里,可以用到 Panel.to_frame() 输出多维数据结构。就拿上面的例子继续:

 

wp.to_frame()

 

你知道 Pandas 的名字是怎么来的吗?

答案:点击

  • 30
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值