数据分析第二步:pandas学习笔记

4 篇文章 0 订阅
2 篇文章 0 订阅

本篇文章主要借鉴《利用Python进行数据分析》一书,文中很多例子是博主自己举例,基本都没有给出答案,有想要学习的同学可以自己把代码敲出来然后运行,查看结果,实践是编程学习的第一步啦~

一、背景

1.pandas包含的数据结构和数据处理共计使得在python中进行数据清洗和分析非常快捷,经常与其他数值计算工具比如numpy、scipy,以及数据可视化工具如matplotlib一起使用。

2.numpy处理的是同质型数值类数组数据,而pandas处理的是表格型或异质型数据。

3.导入pandas:import pandas as pd。导入常用的类:from pandas import DataFrame,Series

二、pandas常用两个数据结构:Series、DataFrame

1.Series:是一维的数组型对象,包含了值序列和索引。当不指定索引时,默认生成的索引是从0到N-1。可以通过声明变量.index和.values来查看索引和值。

obj=pd.Series([4,-3,2,1])
obj.index
obj.values

或者可以直接在声明变量的时候加上自定义的索引:

obj=pd.Series([4,-3,2,1],index=['a','b','e','d'])

如果需要获取其中的数据,有类似数组索引的操作,既可以按索引值索引,又可以按位置索引:obj['e']或者obj[2] ,得到的结果都是2。如果要获取多个值,一定要在索引外套上中括号:obj[['e','a','b']]或obj[[2,0,1]]

2.可以对Series对象进行数学函数和布尔型的操作:

obj[obj>0]
obj*2
np.exp(obj)

3.其实Series类似于长度固定且有序的字典。

查询值或索引是否在Series中,可以类似于字典用in关键字:'a' in obj,返回布尔值。也可以直接从字典生成Series:

sdata={'a':'one','b':'two','c':'three'}
obj3=pd.Series(sdata)

4.Series对象自身和其索引都有name属性,通过对name赋值达到“取名字”的作用:

obj4.name='map'
obj4.index.name='word'

5.DataFrame:表示的是矩阵的数据表,包含已排序的列集合,每一列可以是不同的值类型。DataFrame既有行索引又有列索引。

6.构建DataFrame:包含多个等长度列表的字典或者包含Numpy数组的字典

data={'city':['a','b','c','d'],
     'population':[1000,1500,1200,2000],
     'year':[2002,2002,2001,2005]}
frame=pd.DataFrame(data)

也可以用包含字典的嵌套字典构建:

obj={'a':{2001:3.4,2002:1},
    'b':{1990:5,2001:5,2002:4.2}}
obj2=pd.DataFrame(obj)

7.可以用head方法查看前几行数据:frame.head(2)

可以指定列顺序:frame2=pd.DataFrame(data,columns=['city','year','population'])

如果传入的值不存在,则会用NaN表示缺失值

8.DataFrame检索列可以用字典的方式:frame2['city']或者frame2.city

9.列的引用可以做统一的修改处理:frame2['day']=12或者frame2.day=np.arange(4)

当把列表或者数组赋值给一列时,值的长度必须和DataFrame的长度相匹配,如果有空缺将自动填补成缺失值

val=pd.Series([-1,-2,3],index=[3,2,0])
frame2.day=val

10.del关键字可以删除指定列:del frame2['day']

11.类似于Series,DataFrame也可以给行和列取名:obj2.index.name='year';obj3.columns.name='city'

三、基本功能

1.重建索引:obj2.reindex([2000,2003,2001])

ffill方法可以插值而防止缺失值的出现,默认是向前填充:

obj3=pd.Series(['a','b','c'],index=[1,2,4])
obj3.reindex(range(6),method='ffill')

如果是第一个数确实,无法向前填充则仍然是缺失值NaN。向后填充是bfill

2.改变DataFrame的行索引和列索引:

frame=pd.DataFrame(np.arange(9).reshape(3,3),index=['a','c','d'],columns=[1,2,3])
frame2=frame.reindex(['a','b','c','d'])   改变行
frame2.reindex(columns=[1,2,3,4])      改变列

3.轴向上删除行或列:

frame2.drop(['b','c'])  删除行
frame2.drop(2,axis=1)  删除列,注意删除列的时候要制定是1号轴

这样表示后只是提取了原结构的视图,没有进行改变

frame2.drop('b',inplace=True)   这样操作之后就会将b行清除

4.索引、选择:与Numpy索引类似,不过Numpy索引只能是整数。

obj=pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=[1,2,3,4])
obj['b':'c']和obj[2:4]得到的结果相同

5.使用loc和iloc从DataFrame中选取行或行的集合:obj.loc['b',[1,2]]或者obj.iloc[1,[0,1]]。注意,使用iloc的时候是完全的按位置取集合,跟索引没有关系,而loc是索引。

obj.iloc[[1,2],[0,3]],得到的是原结构的子集

6.算术:将对象相加时,如果存在某个索引对不相同,则返回索引对的并集,缺失值自动填充为NaN。或者可以使用fill_value实现缺失值的填充:

s1.sub(s2,fill_value=0),如果出现缺失值,则会默认s2中的值为0进行计算

如果加上前缀r,则计算会颠倒:s1.rsub(s2)等于s2-s1等于s2.sub(s1)

7.DataFrame和Series之间的操作遵循广播机制,默认情况下,DataFrame和Series的数学操作会将Series的索引和DataFrame的列进行匹配并广播到各行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值