Python数据科学手册(五)【Pandas 数据操作】

Numpy的一个优点就是提供了快速的元素级别操作,比如算术运算以及其他复杂操作。DataFrame继承 了大部分功能。 Pandas在这些函数的基础上提供了更为高级的功能。比如,一元运算不修改行索引和列索引;而对于二元操作,Pandas会自动对齐行索引。

索引不变的通用函数

由于Pandas是基于Numpy搭建的,所以任何Numpy的通用函数都适用于Pandas Series对象和DataFrame对象。 首先,我们创建一个Series对象和DataFrame对象。

import pandas as pd
import numpy as np
rng = np.random.RandomState(42)
ser = pd.Series(rng.randint(0, 10, 4))
0    6
1    3
2    7
3    4
dtype: int64

创建DataFrame

df = pd.DataFrame(rng.randint(0, 10, (3, 4)),
                  columns=['A', 'B', 'C', 'D'])

image.png

如果将Numpy通用函数作用与Pandas对象上,得到的结果索引保持不变:

np.exp(ser)

结果为:

0     403.428793
1      20.085537
2    1096.633158
3      54.598150
dtype: float64

更复杂的例子:

np.sin(df * np.pi / 4)

image.png

对齐索引的通用函数

对于二元操作,Pandas会自动对齐索引之后然后进行运算。

Series中的索引对齐

首先,创建两个Series对象,然后进行合并操作:

area = pd.Series({'Alaska': 1723337, 'Texas': 695662,
                  'California': 423967}, name='area')
population = pd.Series({'California': 38332521, 'Texas': 26448193,
                        'New York': 19651127}, name='population')

通过除法运算计算人 口密度:

population / area

结果为:

Alaska              NaN
California    90.413926
New York            NaN
Texas         38.018740
dtype: float64

结果索引是两者的并集:

area.index | population.index
# Index(['Alaska', 'California', 'New York', 'Texas'], dtype='object')

如果某个DataFrame没有对应的键值,则赋值为NaN。对于其他的二元算术操作,结果都是类似的:

A = pd.Series([2, 4, 6], index=[0, 1, 2])
B = pd.Series([1, 3, 5], index=[1, 2, 3])
A + B

结果为:

0    NaN
1    5.0
2    9.0
3    NaN
dtype: float64

如果填充NaN不是自己想要的结果,还可以通过调用方法并指定填充值:

A.add(B, fill_value=0)

输出为:

0    2.0
1    5.0
2    9.0
3    5.0
dtype: float64

DataFrame中的索引对齐

当操作DataFrame时,会通水对齐行和列。

A = pd.DataFrame(rng.randint(0, 20, (2, 2)),
                 columns=list('AB'))
B = pd.DataFrame(rng.randint(0, 10, (3, 3)),
                 columns=list('BAC'))

A+B:

A + B

image.png

还可以指定填充值:

fill = A.stack().mean()
A.add(B, fill_value=fill)

结果为:

image.png

同时操作DataFrame和Series的通用函数。

当同时操作DataFrame和Series对象时,行和列索引保持对齐。

df = pd.DataFrame(A, columns=list('QRST'))
df - df.iloc[0]

结果为:

image.png

上述操作是行级别的,如果需要列级别的操作,需要指定aixs:

df.subtract(df['R'], axis=0)

image.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

codevs 1213 解的个数

1213 解的个数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知整数x...

34540
来自专栏数据之美

java 中 16 进制 HEX 转换成字节码形式的 UTF-8

恩,又碰到个蛋疼的编码转换问题了:要把形如 \xE9\xBB 的字符串转成中文。。。 在python中我们直接 print "\xE9\xBB\x84" ...

28350
来自专栏Python攻城狮

数据分析工具Pandas1.什么是Pandas?2.Pandas的数据结构SeriesDataFrame3.Pandas的索引操作索引对象IndexSeries索引DataFrame索引高级索引:标签

Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构 和 数据操作工具,它是使Python成为强大而高效的数据分析环境的重要...

35820
来自专栏HansBug's Lab

3097: Hash Killer I

3097: Hash Killer I Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special Judge Su...

24440
来自专栏jeremy的技术点滴

py3_cookbook_notes_01

34780
来自专栏编程微刊

Pandas的对齐运算

20440
来自专栏SeanCheney的专栏

《Pandas Cookbook》第07章 分组聚合、过滤、转换1. 定义聚合2. 用多个列和函数进行分组和聚合3. 分组后去除多级索引4. 自定义聚合函数5. 用 *args 和 **kwargs

第01章 Pandas基础 第02章 DataFrame运算 第03章 数据分析入门 第04章 选取数据子集 第05章 布尔索引 第06章 索引对齐 ...

48920
来自专栏刘笑江的专栏

通过Swift学函数式编程

在文章SWIFT IS A LOT LIKE SCALA [1] 提到Swift和Scala有很大的相似之处,在某些特性甚至比Scala对函数式编程的支持更友好...

17350
来自专栏恰童鞋骚年

剑指Offer面试题:35.将字符串转换为数字

  (3)考虑输入的字符串是否会发生上溢或下溢(正整数的最大值是0x7FFFFFFF,最小的负整数是0x80000000)

10550
来自专栏SeanCheney的专栏

《利用Python进行数据分析·第2版》第5章 pandas入门5.1 pandas的数据结构介绍5.2 基本功能5.3 汇总和计算描述统计5.4 总结

pandas是本书后续内容的首选库。它含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas经常和其它工具一同使用,如数值计算工具NumPy和...

54970

扫码关注云+社区

领取腾讯云代金券