Pandas

Python学习笔记(9):Series和DataFrame的算

2019-02-12  本文已影响1人  刘爱玛

Pandas的一个最重要的功能是,可以对不同索引的对象进行数据运算。

1、两个Series对象的运算

相同索引上的元素直接相加,索引不同的元素默认为NA值。

import pandas as pd
import numpy as np
from pandas import Series, DataFrame
s1 = Series([7.3, -2.5, 3.4, 1.5], index = ['a', 'c', 'd', 'e'])
s2 = Series([-2.1, 3.6, -1.5, 4, 3.1], index = ['a', 'c', 'e', 'f', 'g'])
s1 + s2
输出:
a    5.2
c    1.1
d    NaN
e    0.0
f    NaN
g    NaN
dtype: float64

2、两个DataFrame对象的运算

相同索引及相同列上的元素直接相加,索引或列不同的元素默认为NA值。

df1 = DataFrame(np.arange(9).reshape((3, 3)), columns = list('bcd'), index = ['Ohio', 'Texas', 'Colorado'])
df2 = DataFrame(np.arange(12).reshape((4, 3)), columns = list('bde'), index =  ['Utah', 'Ohio', 'Texas', 'Oregon'])
df1 + df2
输出:
    b   c   d   e
Colorado    NaN NaN NaN NaN
Ohio    3.0 NaN 6.0 NaN
Oregon  NaN NaN NaN NaN
Texas   9.0 NaN 12.0    NaN
Utah    NaN NaN NaN NaN

3、在算数运算时填充值

看上面的一大片NaN,感觉好像不是很舒适,可以用调用算数函数的方式,为NaN直接填充想要的值。


灵活的算数方法
df1.add(df2, fill_value = 0)
输出:
    b   c   d   e
Colorado    6.0 7.0 8.0 NaN
Ohio    3.0 1.0 6.0 5.0
Oregon  9.0 NaN 10.0    11.0
Texas   9.0 4.0 12.0    8.0
Utah    0.0 NaN 1.0 2.0

我用的例子跟书上的不一样,然后发现fill_value并不是把所有的NaN全都设置为0,而是将两个数组不重叠的索引或列上的数值置为0,然后再完成算数,但如果某个索引和列对应的数据在两个数组中都没有,那么其数值仍然是Na。

4、DataFrame与Series之间的运算(广播)

DataFrame与Series之间的运算可以分为两种情况:
一是匹配列,沿着行广播。

frame = DataFrame(np.arange(12).reshape((4, 3)), columns = list('bde'), index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
series = frame.ix['Utah']
frame - series
输出:
    b   d   e
Utah    0   0   0
Ohio    3   3   3
Texas   6   6   6
Oregon  9   9   9

如果DataFrame的列在Series的索引中找不到,则以Na填充。

series2 = Series(range(3), index = ['b', 'e', 'f'])
frame + series2
输出:
    b   d   e   f
Utah    0.0 NaN 3.0 NaN
Ohio    3.0 NaN 6.0 NaN
Texas   6.0 NaN 9.0 NaN
Oregon  9.0 NaN 12.0    NaN

如果希望DataFrame的行匹配到Series的index,并且在列上广播,则必须使用调用函数方法。

series3 = frame['d']
frame.sub(series3, axis = 0)
输出:
    b   d   e
Utah    -1  0   1
Ohio    -1  0   1
Texas   -1  0   1
Oregon  -1  0   1

axis代表要匹配的轴,这里要匹配的是DataFrame的行,所以axis = 0。

上一篇下一篇

猜你喜欢

热点阅读