3-3 Pandas的对齐运算

数据分析工具pandas


Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一
(1) 一个强大的分析和操作大型结构化数据集所需的工具集
(2) 基础是NumPy,提供了高性能矩阵的运算
(3) 提供了大量能够快速便捷地处理数据的函数和方法
(4)应用于数据挖掘,数据分析
(5)提供数据清洗功能

3. Pandas的对齐运算

3.1 算术运算和数据对其

import numpy as np
import pandas as pd

#Series
s1 = pd.Series(np.arange(4),index=['a','b','c','d'])
s2 = pd.Series(np.arange(5),index=['a','c','e','f','g'])
#结果为:
#a    0
#b    1
#c    2
#d    3
print(s1)
#结果为:
#a    0
#c    1
#e    2
#f    3
#g    4
print(s2)
#结果为:
#a    0.0
#b    NaN
#c    3.0
#d    NaN
#e    NaN
#f    NaN
#g    NaN
s1+s2

#DataFrame
df1 = pd.DataFrame(np.arange(12).reshape(4,3),index=['a','b','c','d'],columns=list('ABC'))
df2 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','d','f'],columns=list('ABD'))
#结果为:
#   A   B   C
#a  0   1   2
#b  3   4   5
#c  6   7   8
#d  9  10  11
print(df1)
#结果为:
#   A  B  D
#a  0  1  2
#d  3  4  5
#f  6  7  8
print(df2)
#结果为:
#    A	 B	 C	 D
#a	 0.0 2.0 NaN NaN
#b	 NaN NaN NaN NaN
#c	 NaN NaN NaN NaN
#d	12.0 14.0 NaN NaN
#f	 NaN NaN NaN NaN
df1+df2

3.2 使用填充值的算术方法

方法 描述
add,radd 加法(+)
sub,rsub 减法(-)
div,rdiv 除法(/)
floordiv,rfloordiv 整除(//)
mul,rmul 乘法(*)
pow,rpow 幂次方(**)
#Series
#结果为:
#a    0
#b    1
#c    2
#d    3
print(s1)
#结果为:
#a    0
#c    1
#e    2
#f    3
#g    4
print(s2)
#结果为:(与s1+s2效果一致)
#a    0.0
#b    NaN
#c    3.0
#d    NaN
#e    NaN
#f    NaN
#g    NaN
print(s1+s2)
print(s1.add(s2))
#fill_value=0填充值为0
#结果为:
#a    0.0
#b    1.0
#c    3.0
#d    3.0
#e    2.0
#f    3.0
#g    4.0
s1.add(s2,fill_value=0)

#DataFrame
#结果为:
#	A   B   C
#a  0   1   2
#b  3   4   5
#c  6   7   8
#d  9  10  11
print(df1)
#结果为:
#   A  B  D
#a  0  1  2
#d  3  4  5
#f  6  7  8
print(df2)
#结果为:
#	  A     B   C   D
#a   0.0   2.0 NaN NaN
#b   NaN   NaN NaN NaN
#c   NaN   NaN NaN NaN
#d  12.0  14.0 NaN NaN
#f   NaN   NaN NaN NaN
print(df1+df2)
#结果为:
#    A	  B	   C    D
#a	0.0  2.0  2.0  2.0
#b	3.0	 4.0  5.0  NaN
#c	6.0	 7.0  8.0  NaN
#d	12.0 14.0 11.0 5.0
#f	6.0	 7.0  NaN  8.0
df1.add(df2,fill_value=0)

#字母r开头,表示会翻转参数
# 1/df1 与 df1.rdiv(1) 等价
#结果为:
#      A         B         C
#a       inf  1.000000  0.500000
#b  0.333333  0.250000  0.200000
#c  0.166667  0.142857  0.125000
#d  0.111111  0.100000  0.090909
print(1/df1)
#结果为:
#       A         B         C
#a       inf  1.000000  0.500000
#b  0.333333  0.250000  0.200000
#c  0.166667  0.142857  0.125000
#d  0.111111  0.100000  0.090909
print(df1.rdiv(1))

#在重新指定索引时也可利用fill_value参数对缺失值进行填充
#结果为:
#   A	B	D
#a	0	1	9
#b	3	4	9
#c	6	7	9
#d	9	10	9
df1.reindex(columns=df2.columns,fill_value=9)

3.3 DataFrame和Series混合运算

#DataFrame和Series混合运算
arr = np.arange(12).reshape(3,4)
#结果为:[0 1 2 3]
print(arr[0])
#广播机制 每一行都减去arr[0]
#结果为:
#[[0 0 0 0]
# [4 4 4 4]
# [8 8 8 8]]
print(arr-arr[0])

#对应列索引 依次对行操作
#结果为:
#   A   B   C
#a  0   1   2
#b  3   4   5
#c  6   7   8
#d  9  10  11
print(df1)
s3 = df1.iloc[0]
#结果为:
#A    0
#B    1
#C    2
print(s3)
#广播机制 Series的索引匹配DataFrame的列索引 沿着行依次向下广播执行对应操作
#结果为:
#   A  B  C
#a  0  0  0
#b  3  3  3
#c  6  6  6
#d  9  9  9
print(df1-s3)

#对应行索引 依次对列操作
#取出df1中A列数据
s4 = df1['A']
#结果为:
#a    0
#b    3
#c    6
#d    9
print(s4)
#设置axis='index'参数后沿着列进行广播执行对应操作(axis='index'等价于axis=0)
#结果为:
#	A	B	C
#a	0	1	2
#b	0	1	2
#c	0	1	2
#d	0	1	2
df1.sub(s4,axis='index')
上一篇:【Python】本专栏要点复习


下一篇:如何在 Pandas 中使用 SQL