Pandas
Pandas介绍:数据处理工具。
为什么使用Pandas:
Numpy已经能够帮助我们处理数据,能够结合matplotlib解决部分数据展示等问题,那么pandas学习的目的在什么地方呢?
- 边界的数据处理能力
- 读取文件方便
- 封装了Matplotlib、Numpy的画图和计算
DataFrame类型:
numpy中创建股票涨跌幅数据形式:
- 但是这样的数据形式很难看到存储的是什么样的数据,并且也很难获取相应的数据,不如需要获取某个指定股票的数据,就很难去获取!!
问题:如何让数据更有意义的显示。
具体演示:
数据准备:
将ndarray类型转换为DataFrame类型:
DataFrame既有行索引又有列索引的二维数组。
- 给股票涨跌幅数据增加行列索引,显示效果更佳:
- 增加行索引
构造行索引序列: - 或是:
- 添加行索引:
- 增加列索引:
- 股票的日期是一个时间的序列,我们要实现从前往后的时间还要考虑每月的总天数等,不方便。使用pd.data_range():用于生成一组连续的时间序列(暂时了解)
- 股票的日期是一个时间的序列,我们要实现从前往后的时间还要考虑每月的总天数等,不方便。使用pd.data_range():用于生成一组连续的时间序列(暂时了解)
- 生成一个时间的序列,略过周末非交易日:
- 或是:
- 日期的形式也可以:
- 添加列索引:index代表行索引,columns代表列索引。
总结:
1、DataFrame结构
- DataFrame对象既有行索引,又有列索引
- 行索引,表明不同行,横向索引,叫index
- 列索引,表明不同列,纵向索引,叫columns
DataFrame常用属性:
shape形状属性:
index取行索引列表属性:
columns取列索引列表属性:
values直接获取其中ndarray的值:
T转置属性:
DataFrame常用方法:
head(5):显示前5行内容。
- 注意:如果不补充参数,默认是前5行,填入参数N则显示前N行。
tail(5):显示后5行内容。
- 注意:如果不补充参数,默认是后5行,填入参数N则显示后N行。
DataFrame索引的设置:
- 修改行列索引值:
修改行索引:
- 注意:不能单个设置,只能整体修改。
修改列索引:
- 注意:不能单个设置,只能整体修改。
reset_index(drop=True/False)重设索引:
- reset_index(drop=False)
- 设置新的下标索引
- drop:默认为False,不删除原来索引,如果为True,删除原来的索引值。
- 默认是drop=False。
注意:这个是不会修改原数据的。
set_index()以某列值设置为新的索引。
- set_index(keys,drop=True)
- keys:列索引名称或者列索引名称的列表
- drop:boolean,default True.当作新的索引,删除原来的索引
准备数据:
- df = pd.DataFrame({“month”: [1, 4, 7, 10], “year”: [2012, 2014, 2013, 2014], “sale”: [55, 40, 84, 31]})
- 注意:以字典的形式创建了一个DataFrame类型。
将月份列值设置成新的索引:
- 默认是drop=True:
将多个列的值设置成索引:
- 注:通过刚才的设置,这样DataFrame就变成了一个具有Multilndex的DataFrame
一个MultiIndex的DataFrame是可以用来存储三维数据的。
Multilndex:
- df = pd.DataFrame({“month”: [1, 4, 7, 10], “year”: [2012, 2014, 2013, 2014], “sale”: [55, 40, 84, 31]})
- 多级或分层索引对象。
- index属性
- names:levels的名称
- levels:每个level的元组值
- index属性
(了解,新版本中已废掉了)Panel:
具体使用的api手册:
为什么看不到它的具体数据呢???
- 因为电脑是平面的,而Panel是三维的,现在是不能通过二维看三维数据的。通常我们把Panel看作是dataframe的容器:那我们可以索引它其中一个维度,来看到一个dataFrame。
Series:
思考:如果获取DataFrame中某个股票的不同时间数据?这样的结构是什么呢?
准备数据
- 创建一个符合正态分布的10个股票5天的涨跌幅数据
- stock_change = np.random.normal(0, 1, (10, 5))
- 将ndarray类型的数据转换为DataFrame类型的数据:
- date = pd.date_range(start=“20180101”, periods=5, freq=“B”)
- stock = [“股票_” + str(i) for i in range(stock_change.shape[0])]
- data = pd.DataFrame(stock_change, index=stock, columns=date)
- 取出第2只股票的所有时间列数据:
- 我们发现是Series类型,那什么是Series类型呢?
- 什么是Series结构呢?我们直接看下面的图:
- 总结:series结构只有行索引。
- 将前面的涨跌幅数据进行转置,然后获取“股票_0”的所有数据:
下面这一步相当于是series去获取行索引的值:
- 也可以下面这样获取series类型的数据:
创建Series:
- 指定内容,默认索引:
- 指定内容,指定索引:
通过字典数据创建:
获取Series数据类型的索引和值:
- 总结:DataFrame类型中有Series类型,Series类型中有ndarray类型,也可以DataFrame是Series的容器,Series是ndarray的容器。
总结:pandas的三种数据结构。
2、Panel
- DataFrame的容器
3、Series
- 带索引的一维数组
- 属性
- index
- values
总结:
- DataFrame是Series的容器
- Panel是DataFrame的容器