🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🦄 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:Python数据挖掘
🌠 首发时间:2022年8月31日
✅ 如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦
Numpy 已经能够帮助我们处理数据,能够结合 matplotlib 解决部分数据展示等问题,那么学习 Pandas 的目的是什么呢?
便捷的数据处理功能
Pandas 拥有三大数据结构 —— DataFrame、Panel、Series
回顾我们在 Numpy 当中创建的股票涨跌幅数据的形式?
import numpy as np
# 创建一个符合正态分布的10个股票5天的涨跌幅数据
stock_change = np.random.normal(0, 1, (10, 5))
会得到类似于下面的一组数据:
array([[-0.76262691, -1.53906032, -1.19438127, -1.81317422, -0.3470865 ], [ 0.59125622, -2.19342596, -0.64091173, 0.71351875, -0.09791594], [-0.43086545, 0.25453646, -0.15989081, -2.37560652, 0.14228323], [-0.59931837, 0.92769144, -1.32584091, -0.50051822, -0.91595638], [ 0.97610619, 0.01210933, -0.40116201, 0.67677703, 0.07081736], [ 0.48321613, 1.03806051, 0.64154591, -0.05624017, 1.14431186], [ 0.50118994, -0.41052898, 0.90930519, -1.99978121, -0.91814337], [-0.08912512, -2.38287704, -2.13710752, 0.29732938, -1.50453318], [ 0.18190879, -0.72589502, -1.07843733, -1.33786192, 0.11145101], [ 0.40291687, -1.09541242, -0.81029028, -0.47490371, -1.90883155]])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
上面数据的结构为:既有行索引,又有列索引的二维数组
但是这样的数据形式很难看到存储的是什么样的数据,并且也很难获取相应的数据,比如需要获取某个指定股票的数据,就很难去获取
问题:如何让数据更加有意义地去显示出来?
import pandas as pd
# 使用Pandas中的数据结构
pd.DataFrame(stock_change)
运行代码,会出现下图的效果,默认索引是从 0 开始:
这样效果还不是很好,我们可以给股票涨跌幅数据增加行列索引,这样显示效果更佳
# 添加行索引
stock = ["股票{}".format(i) for i in range(10)]
pd.DataFrame(stock_change, index=stock)
# 添加列索引
date = pd.date_range(start="20180101", periods=5, freq="B")
pd.DataFrame(stock_change, index=stock, columns=date)
最终呈现效果如下:
DataFrame 对象既有行索引,又有列索引,类似于二维表
将刚才得到的表用变量保存起来
data = pd.DataFrame(stock_change, index=stock, columns=date)
常用属性:
data.shape
data.index
data.columns
data.values
data.T
data.head(3)
data.tail(2)
请注意:以下修改方式是错误的,不能单独修改某一个索引
# 错误的修改方式
data.index[3] = '股票_3'
正确的方式:
stock_code = ["股票_" + str(i) for i in range(stock_change.shape[0])]
# 必须整体全部修改
data.index = stock_code
效果如下:
data.reset_index()
data.reset_index(drop=True)
import pandas as pd
df = pd.DataFrame({'month': [1, 4, 7, 10],
'year': [2012, 2014, 2013, 2014],
'sale': [55, 40, 84, 31]})
# 将月份设置为新的索引
df.set_index("month", drop=True)
# 设置多个索引,以年和月份为例
new_df = df.set_index(["year", "month"])
请注意:通过我们刚才的一波操作,这个 DataFrame 已经变成了一个具有 MultiIndex 的 DataFrame
查看它的行索引,可以发现已经改变了
new_df.index
多级或分层索引对象
new_df.index.names
new_df.index.levels
p = pd.Panel(np.arange(24).reshape(4, 3, 2),
items=list('ABCD'),
major_axis=pd.date_range('20130101', periods=3),
minor_axis=['first', 'second'])
请注意:Pandas 从版本 0.20.0 开始弃用,现在推荐用于表示 3D 数据的方法是 DataFrame 上的 MultiIndex 方法,也就是类似于前面的 new_df
我们将之前的涨跌幅数据进行转置,然后获取 ’股票0‘ 的所有数据
通过已有数据创建
pd.Series(np.arange(10))
pd.Series([6.7, 5.6, 3, 10, 2], index=[1, 2, 3, 4, 5])
通过字典数据创建
pd.Series({'red':100, 'blue':200, 'green':500, 'yellow':1000})