Pandas基于Numpy,相应的运算也是基于Numpy的运算,只不过多了⼀些Pandas的内容,比如运算
结果保留索引和列标签,传递通用函数的时候会自动对齐索引等。
对通用函数保留索引和列标签
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(100, size=(3,5)), columns=["A", "B", "C",
"D", "E"])
print("df=\n", df)
#如果对df使⽤通用函数,成成的结果是保留索引和列标签的
df2 = np.exp(df)
print("df2 \n", df2)
df=
A B C D E
0 77 86 86 53 98
1 56 92 27 0 83
2 6 66 7 54 44
df2
A B C D E
0 2.758513e+33 2.235247e+37 2.235247e+37 1.041376e+23 3.637971e+42
1 2.091659e+24 9.017628e+39 5.320482e+11 1.000000e+00 1.112864e+36
2 4.034288e+02 4.607187e+28 1.096633e+03 2.830753e+23 1.285160e+19
自动对齐索引
在对Series或者DataFrame进行二元运算的时候, Pandas会在计算过程中对齐两边索引,这对于不完
整数据的处理极其重要。
在运算⼯程中,对于缺失值的处理采用默认缺失值处理方法,⼀般是添加NaN。如果想指定缺失值的填充内容,需要:
- 采用Pandas的运算方法,而不是使用运算符
- fill_value参数代表填充的内容
在指定fill_value的时候,需要注意点是,此时是先对参与运算的数据进⾏缺省值处理,然后才运算,这
样很多因为一方是NaN而最终结果也是NaN的运算因为换了缺省值而能够正常运算。而不是先运算,得
到缺省值后再处理。
最终结果的索引内容是两个运算索引的并集。
Series的索引自动对齐
# 此处对于缺失值的处理采⽤默认⽅法,即对于⼆元运算⽅法
# 只要由⼀⽅没有数据,则⽤NaN填充,任何数据与NaN运算结果都是NaN
s1 = pd.Series({
"A": 1, "B":2, "C":3, "D":4, "E":5}, name="ONE")
s2 = pd.Series({
"D":4, "E":5, "F":6, "G":7}, name="TWO")
# 采⽤运算符,此时缺失值只能使⽤默认的值
print("s1 + s2 =\n", s1 + s2)
# 想更换缺失值的处理内容,需要⽤到pandas的运算⽅法和fill—value参数
print(