Python for Data Analysis:Pandas

Pandas的数据格式介绍

Series

  1. Series是一种类似于一维数组的对象。
    它由一组数据以及一组与之相关的数据标签组成。
obj = pd.Series([4,7,-5,3])
obj.index 索引
obj.values 值
  1. 更改Series的索引值,初始化为0到N-1的整数型索引。
obj2 = pd.Series([4,7,-5,3],index = ['d','b','a','j'])
  1. 通过索引方式选取Series中的单个或一组值。
obj2['d']
obj2['a']
obj2[['a','d']]

通过布尔值的方式选取Series中的值。

选取正值
obj2[obj2 > 0]

判断某个值是否在Series的索引中 'a' in obj2

  1. 通过字典创建一个Series,结果Series中的索引就是原字典的键。
state = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3 = pd.Series(state)
obj3.index
obj3.values

在这里插入图片描述
如果设置的索引列表与sdata的键不一致,找不到索引的结果会显示NaN。

obj4 = pd.Series(state,index = ['California','Ohio','Oregon','Texas'])
obj4

在这里插入图片描述
NaN是pandas中的缺失或NA值,可以用isnullnotnull函数用于检测缺失数据。

  1. Series在算数运算会自动对齐不同索引的数据,两个Series相加两者非公有的index的值为NaN。
obj3 + obj4

Out[9]:
California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64
  1. Series对象本身以其索引都有一个name属性。
obj4.name = 'population'
obj4.index.name = 'state'

DataFrame
7. DataFrame是一个表格型的数据结构,它含有一组有序的列。DataFrame既有行索引也有列索引。
引入一个字典来创建一个DataFrame。

data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
        'year' : [2000,2001,2002,2001,2002],
        'pop':[1.5,1.7,3.6,2.4,2.9]
       }
frame = pd.DataFrame(data)
frame.columns
frame.index

在这里插入图片描述
可以通过columns参数来调整列的顺序和位置。

pd.DataFrame(data,columns=['year','state','pop'])

在这里插入图片描述
可以通过index参数来修改行索引。如果传入的列在data找不到,会初始化NaN列。

frame2 = pd.DataFrame(data,columns=['year','state','pop','debt'],index = ['one','two','three','four','five'])

在这里插入图片描述
8. DataFrame列索引

frame2.year
frame2['year']

行索引用loc

frame2.loc['one']
  1. 创建新列
frame.debt = 16.5 标量
frame.debt = np.arange(5) 一组值
frame.debt = [np.nan,1,3,np.nan,6] 
frame['eastern'] = frame.state == "Ohio"

删除列

del frame['eastern']
  1. 转置 frame.T
  2. DataFrame的行列索引都有name属性.
frame.index.name = 'year'
frame.columns.name = 'state'

索引对象
Index对象是不可修改。

方法属性
append连接另一个index对象
diff计算差值
intersection计算交集
union计算并集
isin计算一个指示各值是否到包含在参数集合中
delete删除索引i处的元素
drop删除传入值
insert将元素插入到索引i处
unique计算index中唯一值
is_unique当index没有重复值时,返回True
基本功能

重新索引reindex
reindex可以对行索引(默认)和列索引进行重新索引。

reindex(index = [ ],columns = [ ],fill_value,method,limit)
index:用作行索引的新序列
columns:用作列索引的新序列
fill_value:需要引入缺失值时使用的替代值
method:插值填充方式,ffill前向填充、bfill后向填充
limit:前向或后向填充时的最大填充量

丢失指定轴上的项drop

丢失行方向的项
frame.drop(rowName)

丢失列方向的项
frame.drop(colName,axis = 1)

索引、选取和过滤
Series索引:
在这里插入图片描述
(1) 用序列编号索引

obj[1]
obj[2:4]
obj[[1,3]]

(2) 用index索引。
标签的切片运算,末端是包含的。

obj['b']
obj['b':'c']  
obj[['b','d']]

DataFrame索引:
在这里插入图片描述
(1) 选取列

data['one']
data[['one','three']]

(2) 利用索引切片选取行

选取第一行:data[:1]
选取前两行:data[:2]

(3) 选取three列大于5的行

data[data['three']>5]

(4) 标签索引loc iloc

label形式可以是列表、切片、布尔值
frame.loc(rowLabel,colLabel)
frame.iloc[rowIndex,colIndex]

在这里插入图片描述

算数运算和数据对齐
对不同的索引的对象进行算术运算,结果的索引是该索引对的并集。不重叠的索引处引入NA值。
可以传入fill_value参数来改变不重叠索引的引入值。

方法说明
add
sub
div
mul

函数应用和映射
(1) apply()函数应用到各列或行所形成的一维数组。

frame.apply(function,axis)
axis = 1 应用各行
axis = 0应用各列

例子:求极值

f = lambda x : x.max() - x.min()
frame.apply(f,axis = 1)

(2) applymap元素级的映射函数。Series的方法是map()
例子:数值转换固定格式

form = lambda x:'%.2f' % x
frame.applymap(form)

排序和排名
(1) Series按索引排序sort_index();按值索引sort_values()
(2) DataFrame按索引排序sort_index(),axis参数为1列方向排序;by按某列或某几列排序
(3) rank()排名值。

rank(axis, method=)
min:使用整个分组的最小排名。
max:使用整个分组的最大排名。
average:默认。
first:按值在原始数据中的出现顺序分配排名。

在这里插入图片描述

带有重复值的轴索引
(1)is_unique查看索引是否是唯一的。
(2)如果某个索引对应多个值,选取结果会是一个Series。

汇总和计算描述统计
在这里插入图片描述
(1) sum / mean 用于从Series中提取单个值。

frame.sum(axis,skipna)
axis为1是以行方向,默认为列方向。
skipna参数为布尔值,是否排除缺失值。

(2) cumsum累积型。
(3) describe产生汇总统计。
(4) frame.idxmax()返回每一列最大值对应的行索引值。
在这里插入图片描述
(5) 与描述统计相关的方法

方法说明
count非NA值数量
describe汇总统计
max min最大值 最小值
argmax argmin返回最大值和最小值对应的索引位置
idxmax idxmin返回最大值和最小值对应的索引值
quantile分位数
sum总和
mean算术平均值
mad平均绝对离差
median中位数
var方差
std标准差
skew偏度
kurt峰值
cumsum累计和
cummin cummax累计最大值 累计最小值
cumprod累计积
diff一阶差分
pct_change百分比变化

相关系数和协方差
(1) corr()计算Series之间的相关系数,返回结果为DataFrame。
(2) cov()计算Series之间的协方差,返回结果为DataFrame。
(3) corrwith()计算DataFrame与一个Series之间的相关系数。

唯一值、值计数以及成员资格
(1) 唯一值:Series.unique()
(2) 值计数:Series.value_counts(sort = True/False)
(3) 判断成员资格:Series.isin(value/list)

处理缺失数据
(1) 检测是否为NA值:isnull notnull
(2) 滤除缺失数据:dropna()
对于DataFrame来说还有how和axis参数。

frame.dropna(how,axis)
how = 'any' 丢弃含有NA的行或列
how = 'all' 只丢弃全为NA的行或列
axis = 1 丢弃列

(3) 填充缺失数据:fillna

Series.fillna(替代常数值)
Series.fillna(method,limit)
frame.fillna({col1:替代值1,col2:替代值2})
frame.fillna(value,inplace = 是否对现有对象就地修改)

层次化索引
在一个轴上拥有多个(2个以上)索引级别。

data = pd.Series(np.random.randn(10),index = [['a','a','a','b','b','b','c','c','d','d'],
                                              [1,2,3,1,2,3,1,2,2,3]])

在这里插入图片描述
(1) 外层选取数据子集。

data['b']
data['b' : 'c']
data[['b','d']]

(2) 内层选取数据子集。

data[:,2]

(3) 数据重塑。unstack()将Series转换为DataFrame,unstack()为相反操作。
在这里插入图片描述

根据级别汇总统计

frame.sum(level,axis)
level指定某条轴上求和的级别。

使用DataFrame的列作为索引
在这里插入图片描述
set_index()能将一个或多个列转换为行索引。reset_index作用相反。

frame.set_index(['c','d'],drop = True/False)
drop:是否将转换列移除,默认移除。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值