数据分析工具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')