基础了解(二)
参考资料:http://nbviewer.jupyter.org/github/LearnXu/pydata-notebook/tree/master/Chapter-05/
一、pandas中的数据结构
主要涉及到的库有以下
import pandas as pd
from pandas import Series, DataFrame1、Series对象
series是一个像数组一样的一维序列,并有一个index的数组
obj = pd.Series([4, 7, -5, 3])
0 4
1 7
2 -5
3 3
dtype: int64如上所示,index和value都可以通过属性查看
# 查看value
obj.values
# 查看index
obj.index也可以自己指定index
可以通过index作为索引取值
值得注意的是第二种索引的方式,是将一个列表作为索引,而返回的也是Series的对象
其他操作
其他使用Series的方式
值得注意的是,在使用index调整顺序的时候,如果index中包含字典中没有的值,那就是导致出现空值,也就是NaN
数值相加
相加的原理是根据键,相同的键对应的值相加,若某个键只存在于一方,则得到的结果是NaN,也就是空
名称
series的value和index都有一个name的属性,这个能和其他pandas的函数进行整合(??)
直接修改index
2、DataFrame
DataFrame表示一个长方形,并包含排好序的列,每一列都可以是不同的数值类型。
dataframe也会想series一样自动生成index,而列会按顺序排好
对于较大的数据,用head()方法来查看前五行
生成DataFrame如果指定列的话,会按列指定的顺序排序
如果这时输入一个不存在的列名,对应一列的值全部为空
查看列
从DataFrame单独取出一列的话,就会变成series对象
据原文所说,这两种方式的区别在于,前者可以对应任何列名,而后者必须有效,但我测试结果却是两个都会报错,只要列名是无效的话。
查看行
修改整列的值
也可以把一个series的对象赋值过去,根据对应的index,若不存则为空。
如果列不存在的话,则会创建新的列
删除一列
可转置
其他可转为DataFrame的格式
这里内层的字典的键会变成index的键名
如果frame的index和column有name属性的话,也会被显示
3、索引对象
pandas中的索引除了保存index之外,还保存一些name的数据。
与python中的set不同的是,index允许重复的元素出现
在这种重复便签中选择的话,会选择所有相同的标签。
二、主要功能
1、重新索引
重新索引的意思就是将一个已经有索引的对象,修改其索引
如果没有对应的index的话为空
但是我感觉这没有什么意义,只是修改了索引的顺序,我原以为修改的是索引的键名,
修改值
在处理时间序列这样的数据时,我们可能会需要在reindex的时候修改值,这时可以使用method
我完全不懂这个方法的作用是什么
对于DataFrame,reindex也可以修改row,columns的index。
还可以使用loc
2、按轴删除记录
drop
对于series,drop会删除指定的轴的值,并且返回一个删除后的对象
对于dataframe,index可以按照行或列来删除
这里的axis参数,不是很理解具体什么作用
当只有一个值的时候,默认为axis=0,删除的是行,设置为axis=1之后,删除的列,同理,当参数是一个数组的时候,默认是行,添加axis=‘columns’之后,就是删除列。
3、索引,选择,过滤
series中的index相当于numpy中array的index,而且除了整数,还可以使用series的index
值得注意的是,使用series的切片的时候,它是会包含尾节点的,这点在其他很多相同的情况中也要注意尾节点的问题。
对于DataFrame,index可以通过值或者序列,选中一个以上的列
用loc和iloc来选择
这两个方法可以来选择行或列
索引函数也能用于切片
4、整数索引
新手使用整数来索引的话,总是出现一些问题,因为这与python的list和tuple的索引不太一样
为了保持连贯性,如果index中包含整数,那么选择数据的时候,为了更精确的地选择,使用loc或者ilco
5、算术和数据对齐
1、pandas有一个很有用的特点就是,不同index的对象之间的算术运算。如果两个对象相加,但是它们的index并不相同,最终的结果中的index是两个index的合集
跟之前提到过的一样,没有对应的index的话,值会变为NaN,因此引入了很多缺失值。
在DataFrame中,数据对齐同时发生在行和列上
如果两个DataFrame相加,而且没有column和row,结果会全是null
2、带填充值的算术方法
比方说上面的缺失值,我们希望填充0,
填充原本的值不是更好吗?填充0的话,还是会有部分值缺失的吧
使用添加方法
其他方法
3、dataframe和series之间的操作
运算中每一行都减去了arr[0],他说这个叫“broadcasting”,
如果一个index不在dataframe的column中,或者不在series的index中,那么结果也是合集,然后部分值为空
刚才是dataframe和行series进行算术操作,如果换做列,必须使用算术方法
6、函数应用和映射
numpy的数组方法也可以用在pandas的对象上
另一个常用的操作时把一个用在一维数组上的函数,应用在一行或一列上,要用到dataframe中的apply函数
在frame中每一列,这个函数会被调用一次
我已经彻底晕了,不知道axis到底是行还是列
像sum或者mean这样的数组统计方法,dataframe中已经集成了,所以没必要用apply,apply不会返回标量,只会返回一个含有多个值的series
elemen-wise(点对点)的python函数也能用,比如要格式化frame中的浮点数,变为string,可以使用applymap
7、排序
可以使用sort_index方法,返回一个新的对象
对于dataframe,可以使用index或者其他axis来排序
通过值来排序
np.nan指的是缺失值,也就是NaN,也就是空。
缺失值会被排在最后
对于DataFrame,可以把一列或者多列作为sort keys
多个值排序的规则跟数据库中的很相似,先排第一个参数的列,然后排第二参数的列。
ranking是给有效的数据分配数字。
rank方法可以用于series和dataframe,它会默认给每个group一个平均排名。
懂倒是懂了,但是有什么用处呢?
对于dataframe可以根据行或列来计算rank
8、有重复label的轴索引
之前的例子都是唯一值的索引,一些pandas函数(reindex)需要label是唯一的,但这不是强制的
三、汇总和描述性统计
pandas有很多数学和统计方法,大部分可以归类为降维或汇总统计,可以用来从series中提取单个值(sum和mean),还有一些方法处理缺失值
这里应该是指处理数据,返回单个值,提取好像的感觉是拿出原有数据
计算的时候缺失值会被除外,可以使用skipna来跳过
其他方法
1、相关性和协方差
假设DataFrame时股价和股票数量,用pandas-datareader包能加载,如果没有可以用install下载
2、唯一值、值计数、会员
这里介绍从一维series中提取信息的方法
Last updated
Was this helpful?