机器学习数据科学库2——pandas2

本文详细介绍了pandas的核心数据结构,包括Series、DataFrame和Panel的创建与特性。重点讲解了如何进行数据操作,如添加、排序、索引管理和分组统计。此外,还涵盖了数据聚合、数据导入导出、时间序列处理和数据可视化等关键知识点,是pandas使用的重要指南。
摘要由CSDN通过智能技术生成

目录

核心数据结构

Series

创建

特性

DataFrame

创建

特性——列的选择、增加和删除

Panel

基础运算

Series

添加

DataFrame

添加

排序和排名

pandas索引

行索引和列索引

索引的类

重复索引

多级索引

索引的交换

多级索引的统计

把某些列设置为索引

分组统计

分组计算

对Series分组

对DataFrame分组

分组中的元素个数统计

对分组进行迭代

分组转换为字典

按列分组

其他分组方法

通过字典进行分组

通过函数分组

通过索引级别进行分组

数据聚合

内置聚合函数

自定义聚合函数agg

一次性应用多个聚合函数

不同列应用不同聚合函数

重置索引

分组运算和转换

分组数据转换transform

自定义数据处理apply

 

数据导入和导出

索引及列名

缺失值处理

逐块读取数据

保存数据到磁盘

二进制数据

其他格式简介

时间序列

生成时间范围

时间频率

时期序列

时期的频率转换

Timestamp和Period相互转换

重采样

OHLC重采样

通过groupby重采样

升采样和插值

时期重采样

时间日期解析

数据可视化



核心数据结构

Series是一维,DataFrame是二维,Panel是带标签的数组,是三维

Series

创建

方法1:

s=pd.Series(np.random.randn(5), index=['a','b','c','d','e']) 如果不指定索引index,系统会自动使用0,1,2,3,4...作为索引

方法2:

使用字典

d={'a':0,'b':1,'d':3}

s=pd.Series(d,index=list('abcd'))  字典没有给c赋值,c对应的值为NaN

方法3:

使用标量创建

s=pd.Series(5,index=list('abcd'))  每个值都是一样的

特性

1.是numpy中类ndarray的对象,ndarray的方法都支持

(1)可以使用s[0] s[:5] s[2:5] s[[1,3,4]] 访问 

(2)np.sin(s)   np.exp(s)  df.values 可以使用numpy里面的这些函数

np.asarray(df)和df.values是相同的

2.类dict(字典)中的对象

(1)可以使用字典来访问 s['a'] 访问索引是a的元素 但是访问不存在的索引会报错,但是用s.get('f')访问,如果f不存在会返回None,s.get('f',0)可以添加f索引的元素为0

(2)s['b']=3 赋值

(3)s['g']=100 添加新元素

3.标签对齐操作

s1+s2 会自动标签对齐,共同的索引元素相加,不同的索引不能计算,显示NaN

DataFrame

二维数组,有行列两个索引标签

创建

df=pd.DataFrame(data,index=index,columns=columns)

可以使用如下方式创建

一维numpy数组,list,Series构成的字典

二维numpy数组

一个Series

另外的DataFrame对象

举例:

  • Series构成的字典

d={'one':pd.Series([1,2,3], index=['a','b','c']), 'two':pd.Series([1,2,3,4], index=['a','b','c','d'])}

df=pd.DataFrame(d)

  one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4

也可以指定行索引

df=pd.DataFrame(d,index=['d','b','a']) 会按dba顺序排列行标签,c不显示

也可以指定列索引

df=pd.DataFrame(d,icolumns=['two','three'])

  • list构成的字典

d={'one':[1,2,3,4],'two':[3,4,5,6]}

df=pd.DataFrame(d)

Series中如果数据个数如果不一致可以用空值代替,但是list如果数据个数不一样会报错

  • 可以使用列表套元组

data=[(1,2.2,'hello'), (2,3,'world')]

df=pd.DataFrame(data, index=['one','two'], columns=list('ABC'))

  A B C
one 1 2.2 hello
two 2 3.0 world
  • 使用列表套字典等等

特性——列的选择、增加和删除

df=pd.DataFrame(np.random.randn(6,4), columns=['one','two','three','four'])

Out[16]:

  one two three four
0 -0.092031 1.116136 0.530261 -1.539783
1 0.945960 -0.194456 0.189686 -0.483637
2 -0.895602 0.573627 1.663476 0.705897
3 -1.115555 -0.049269 0.614421 0.192858
4 -0.177563 0.601958 0.037909 0.041013
5 0.453347 -0.197402 1.703294 0.093993

df['one'] 选一列

df.loc[1] 选一行

df['three']=df['one']+df['two']

del df['three'] 删除

df['flag']=df['one']>0.2 添加一列布尔值

df['five']=5 添加新列等于标量5

s=df.pop('four') 删除一列

df.insert(1,'bar',df['one']+df['two']) 在索引位置为1的地方加一列'bar',值为one和two相加

Out[18]:

  one bar two three four
0 -0.092031 1.024105 1.116136 0.530261 -1.539783
1 0.945960 0.751504 -0.194456 0.189686 -0.483637
2 -0.895602 -0.321975 0.573627 1.663476 0.705897
3 -1.115555 -1.164824 -0.049269 0.614421 0.192858
4 -0.177563 0.424396 0.601958 0.037909 0.041013
5 0.453347 0.255945 -0.197402 1.703294 0.093993

df.assign(Ratio=df['one']/df['two'])

assign也是添加列,但是是复制一个新的数组,inset是在原数组上操作

assign可以使用更复杂的操作,df.assign(Ratio= lambda x: x.one-x.two)

df.assign(ABRatio=df.one/df.two).assign(BarValue= lambda x: x.ABRatio*x.bar)

Out[19]:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值