pandas基本使用总结

pandas基本介绍

基于numpy的扩展库

两个数据类型:Series(一维),DataFrame(二维)

基于上述的数据类型的各类操作:
基本操作、运算操作。特征类操作、关联类操作

对比:

Numpypandas
基础数据类型扩展数据类型
关注数据的结构表达关注数据的应用表达
维度:数据间的关系维度:数据与索引间关系

pandas的Series类型

Series是一维带“标签”数组
index_0 --> data_a
Series基本操作类似于ndarray和字典,根据索引对齐

import pandas as pd
import numpy as np

# 自动索引
b = pd.Series([1,3,6,np.nan,44,1])
#索引   数据
# 0     1.0
# 1     3.0
# 2     6.0
# 3     NaN 无穷
# 4     44.0
# 5     1.0

# 自定义索引
b = pd.Series([1,3,6,np.nan,44,1], index=['a','b','c','d','e','f'])

/***创建series类型***/
# 1.标量值
s = pd.Series(25, index=['a','b','c'])
# 索引  数据
# a     25
# b     25
# c     25

# 2.字典
s = pd.Series({'a':9,'b':8,'c':7})
# 索引  数据
# a     9
# b     8
# c     7
# 利用index指定顺序
s = pd.Series({'a':9,'b':8,'c':7}, index=['c','a','b','d'])
# 索引  数据
# c     7
# a     9
# b     8
# d     NaN

# 3.ndarry
s = pd.Series(np.arange(5))
# 索引  数据
# 0     0
# 1     1
# 2     2
# 3     3
# 4     4
s = pd.Series(np.arnge(5), index=np.arange(9,4,-1))
# 索引  数据
# 9     0
# 8     1
# 7     2
# 6     3
# 5     4

# 4.列表
b = pd.Series([1,3,6,np.nan,44,1], index=['a','b','c','d','e','f'])

# 5.range函数

/***series的基本操作***/
# 1.索引
b = pd.Series([1,3,6,np.nan,44,1], index=['a','b','c','d','e','f'])
b           
b.index     # 获取索引
b.values    # 获取数据
b['b']
b[1]
b[['c','d','e']]
b[:3]
b[b > b.median]
'c' in b # 判断索引'c'是否在b中
0 in b # 判断值0是否在b中
b.get('f', 100) # 在b中查找f标签,如果不存在,就输出100,如果存在就输出f标签的值

# 2.对齐操作
a = pd.Series([1,2,3],['c','d','e'])
b = pd.Series([9,8,7,6],['a','b','c','d'])
a + b
# 索引  值
# a     NaN # 9 + NaN = NaN
# b     NaN
# c     8.0
# d     8.0
# e     NaN

# 3.name属性(Series对象和索引可以有一个名字)
b = pd.Series([9,8,7,6],['a','b','c','d'])
b.name = 'Series对象'
b.index.name = '索引列'
b
# 索引列
# a     9
# b     8
# c     7
# d     6
# Name: series对象, dtype:int64

# 4.修改
b = pd.Series([9,8,7,6],['a','b','c','d'])
b['a'] = 15
b['b','c'] = 20
b.name = "Series" 

pandas的DataFrame类型

二维带“标签”数组
由共用相同索引的多列数据组成,即“表格”
纵向,axis = 0
横向,axis = 1

可由以下类型创建:
1.二维ndarray对象
2.一维ndarray、列表、字典、元组或Series构成的字典
3.Series类型
4.其他的DataFrame类型

DataFrame基本操作类似于Series,依据行列索引

import pandas as pd
import numpy as np

/***创建***/
# 1.二维ndarray
d = pd.DataFrame(np.arange(10).reshape(2,5))


# 2.字典
dt = {'one':pd.Series([1,2,3], index=['a','b','c']),
'two':pd.Series([9,8,7,6],index=['a','b','c','d'])}
d = pd.DataFrame(dt) # 默认键是列索引,即行索引为abcd,列索引为one、two
#       one     two
# a     1       9
# b     2       8
# c     3       7
# d     NaN     6

d = pd.DataFrame(dt,index = ['b','c','d'], cloumns=['two','three']) # 自定义索引,对应dt
#       two     three 
# b     8       NaN
# c     7       NaN
# d     6       NaN

dl = {'one': [1,2,3,4], 'two': [9,8,7,6]}
d = pd.DataFrame(dl, index = ['a','b','c','d'])
#       one     two
# a     1       9
# b     2       8
# c     3       7
# d     4       6


/***索引***/
d.index
d.columns
d.values
d['one']    # 获取某一列数据
d.ix['a']   # 获取某一行数据
d['one']['a'] # 获取某一位置的数据

pandas的数据类型操作

改变结构

  • 增加重排:重新索引,.reindex()
    .reindex(index=None,columns=None,…)的参数
参数说明
index,columns新的行列自定义索引
fill_value重新索引中,用于填充缺失位置的值
method填充方法,ffill当前值向前填充(当前的值由前面填充),bfill向后填充
limit最大填充量
copy默认True,生成新的对象,False时,新旧相等不复制

索引类型的常用方法

方法说明
.append(idx)连接另一个index对象,产生新的index对象
.diff(idx)计算差集,产生新的index对象
.intersection(idx)计算交集
.union(idx)计算并集
.delete(loc)删除loc位置的元素
.insert(loc,e)在loc位置增加一个元素e
  • 删除:.drop()
import pandas as pd
import numpy as np
dl = {'城市': ['北京','上海','广州','深圳','沈阳'],
      '环比': [101.3,101.2,101.3,102.0,100.1],
      '同比': [120.7,127.3,119.4,140.9,101.4],
      '定基': [121.4,127.8,120.0,145.5,101.6]}
d = pd.DataFrame(dl. index = ['c1','c2','c3','c4','c5'])

/***修改***/
d = d.reindex(index=['c5','c4','c3','c2','c1']) # 更改每行的顺序,第一行是c5
d = d.reindex(columns=['城市','同比','环比','定基']) # 更改列的顺序,第一列改成‘城市’

newd = d.columns.insert(4,'新增') # 在第四个位置插入“新增”这一列
newd = d.reindex(columns=newc,fill_value=200) # 新生成一个DataFrame对象,列名为newc,填充值为200
print(newd)

nc = d.columns.delete(2)    # 删除d.columns中的第2个元素
ni = d.index.insert(5, 'c0') # 在d.index中的第5个位置新增'c0'
nd = d.reindex(index=ni,columns=nc,method='ffill') # 'c0'行拷贝'c1'行

/***删除***/
a = pd.Series([9,8,7,6],index=['a','b','c','d'])
a.drop(['b','c'])
d.drop('c5') # 删除c5行,默认axis=0
d.drop('同比',axis=1) # 删除"同比"这一列

pandas的数据类型运算

算术运算法则

算术运算根据行列索引,补齐后运算,运算默认产生浮点数
补齐时缺项填充NaN(空值)
2维和1维、1维和0维间为广播运算
采用±*/符合进行的二元运算产生新的对象

方法形式的运算

方法说明
.add(d,**argws)类型间加法运算,可选参数
.sub(d,**argws)类型间减法运算,可选参数
.mul(d,**argws)类型间乘法运算,可选参数
.div(d,**argws)类型间除法运算,可选参数

比较运算法则

比较运算只能比较相同索引的元素,不进行补齐
2维和1维,1维和0维间为广播运算
采用> < >= <= == !=等符合进行的二元运算产生布尔对象

import pandas as pd
import numpy as np

a = pd.DataFrame(np.arange(12).reshape(3,4))
b = pd.DataFrame(np.arange(20).reshape(4,5))
c = pd.Series(np.arange(4))

a + b
a * b

b.add(a, fill_value=100) # b+a,如果未运算前存在NaN,就把NaN改成100,再运算
a.mul(b, fill_value=0)  # a*b

# 1轴运算
c - 10 # 每一个c中的元素都减10
b - c # b中每一行第i个元素减去c中对应的元素
b.sub(c,axis=0) # 0轴运算,即b中每一列第i个元素减去c中对应的元素

a > c # a中每一行第i个元素和c中对应的元素进行比较
c > 0 # c中每一个元素和0比较

数据的排序

对一组数据的理解
一组数据表达一个或多个含义,对该数据进行摘要,可得:

  • 基本统计(含排序)
  • 分布/累计统计
  • 数据特征、相关性、周期性等
  • 数据挖掘(形成知识)

pandas排序
.sort_index() 在指定轴上根据 索引 进行排序,默认升序
即.sort_index(axis=0,ascending=True)

.sort_values() 在指定轴上根据 数值 进行排序,默认升序

Series.sort_values(axis=0,ascending=True)
DataFrame.sort_values(by, axis=0,ascending=True)
by: axis轴上的某个索引或某个索引列表
NaN会放到排序的末尾

import pandas as pd
import numpy as np

b = pd.DataFrame(np.arange(20).reshape(4,5), index=['c','a','d','b'])

b.sort_index() # 升序排序,原来行标签是cabd,排序后行标签是abcd

b.sort_index(axis=1,ascending=False) # 降序排序,原来列标签是01234,排序后为43210

c = b.sort_values(2, ascending=False) # 对第二列的数据进行降序排序,其他和该列数据对应的数据也跟着改变(eg:第二列最后一行的数据移到第一行,其他列最后一行的数据也移到第一行)
# 排序前:     ?
#     0   1   2   3   4
# c   0   1   2   3   4
# a   5   6   7   8   9
# b   10  11  12  13  14
# d   15  16  17  18  19
# 排序后:     ?
#     0   1   2   3   4
# d   15  16  17  18  19
# b   10  11  12  13  14
# a   5   6   7   8   9
# c   0   1   2   3   4

c = c.sort_values('a',axis=1,ascending=False) # 对行标签为‘a’的行进行降序排序

数据的基本统计分析

适用于Series和DataFrame类型

方法说明
.sum()总和,默认按0轴计算
.count()非NaN的数量
.mean()算术平均值
.median()算术中位数
.var()方差
.std()标准差
.min()最小值
.man()最大值
.argmin()计算数据最小值所在位置的索引(自动索引)
.argmax()计算数据最大值所在位置的索引(自动索引)
.idxmin()计算数据最小值所在位置的索引(自定义索引)
.idxmax()计算数据最大值所在位置的索引(自定义索引)
.describe()针对0轴(各列)的统计汇总
import pandas as pd
import numpy as np

a = pd.Series([9,8,7,6], index=['a','b','c','d'])

a.describe() # a.describe()是一个Series类型
# count 4.000000  a.describe()['count']
# means 7.500000
# std   1.290994
# min   6.000000
# 25%   6.750000
# 50%   7.500000
# 75%   8.250000
# max   9.000000

b = pd.DataFrame(np.arange(20).reshape(4,5), index=['c','a','d','b'])

b.describe() # 对每一列进行统计分析,生成一个DataFrame类型
#              0        1       2       3
# count 4.000000  ......
# means 7.500000  ......
# std   6.454972  ......
# min   0.000000  ......
# 25%   3.750000  ......
# 50%   7.500000  ......
# 75%  11.250000  ......
# max  15.000000  ......

b.describe().ix('max')
b.describe()[2]

数据的累计统计分析

累计统计函数

方法说明
.cumsum()依次给出前1、2、3…n个数的和
.cumprod()依次给出前1、2、3…n个数的积
.cummax()依次给出前1、2、3…n个数的最大值
.cummin()依次给出前1、2、3…n个数的最小值

滚动计算(窗口计算)函数

方法说明
.rolling(w).sum()依次计算相邻w个元素的和
.rolling(w).mean()依次计算相邻w个元素的算术平均值
.rolling(w).var()依次计算相邻w个元素的方差
.rolling(w).std()依次计算相邻w个元素的标准差
.rolling(w).max()依次计算相邻w个元素的最大值
.rolling(w).min()依次计算相邻w个元素的最小值
import pandas as pd
import numpy as np

b = pd.DataFrame(np.arange(20).reshape(3,4), index=['c','a','d','b'])

b.cumsum() # 对每一列运算,依次求出前1、2、3、4个数的和
b.sumprod()
b.cummax()
b.cummin()

b.rolling(2).sum() # 在纵向上,对该元素和前一个元素求和
b.rolling(3).sum() #                     两

数据的相关分析

相关性

  • 正相关
  • 负相关
  • 不相关

判断两个变量X、Y的相关性

  • 协方差
  • Pearson相关系数

相关分析函数

方法说明
.cov()计算协方差矩阵
.corr()计算相关系数矩阵,Pearson、Spearman、Kendall等系数
import pandas as pd

hprice = pd.Series([3.04, 22.93, 12.75, 22.6, 12.33], index=['2008','2009','2010','2011','2012'])
m2 = pd.Series([8.18, 18.38, 9.13, 7.82, 6.69], index=['2008','2009','2010','2011','2012'])

hprice.corr(m2) # 0.52394
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值