20221128笔记

#学了半天才发现版本有点低 或者我用的版本太高了 最新的3.9  pandas讲到panel发现我的版本没有这个东西 上网查了半天才发现新版本已经抛弃了panel 停学这个课程 昨天开始换了新课程 再从numpy开始扎扎实实学起

## 先学习 做练习  一周解决numpy  下一周pandas 在下一周matplotlib

pandas

学习目标

  • 目标

    • 了解pandas与numpy的不同

    • 了解盘打算的multiindex与panel结构

    • 说明pandas的series与dataframe两种结构的区别

  • 应用

    • 股票涨跌幅数据的修改

  • 内容预览

    • 4.1.1 pandas介绍

'''
集成了numpy与matplotlib 可以进行数学计算与画图
panel + data + analysis三个词组合而成
金融与经济领域通常使用panel + data
以numpy为基础,
基于matplotlib,能够简单画图
独特的数据结构
'''

 

  • 4.1.2 为什么使用pandas

1.便捷的数据处理能力
2.读取文件方便
3.封装了matplotlib、numpy进行画图和数据计算
三大数据结构:dataframe、panel、series

 

  • 4.1.3 dataframe

    • 1.dataframe的结构

#创建一个符合正态分布的10个股票5天的涨跌幅数据
stock_change = np.random.normal(0,1,(10,5))
stock_change
array([[-1.71494242e+00,  7.36300496e-01, -4.95922269e-01, 3.68087242e-01, -4.86830151e-03],
      [ 2.24830482e-04, -2.06141280e+00, -3.06700036e-01,8.35788454e-01,  7.37607949e-01],
      [-1.63298747e+00, -1.11216686e+00,  1.06091143e+00,-3.16533215e-01, -3.23207533e-01],
      [ 5.98505614e-01, -1.55178911e+00,  9.31768744e-01,-6.72001628e-01,  8.40092715e-01],
      [ 6.90219146e-01, -2.31856379e-01,  4.73648511e-01,2.69128862e-01, -2.88734194e-02],
      [ 6.62391683e-01,  1.64458470e+00, -7.90748590e-01,-1.03799583e+00, -5.01703739e-01],
      [ 9.68241543e-01,  1.12045541e-01, -4.21707819e-01,-1.01185444e+00,  1.48084378e+00],
      [ 5.31208924e-01,  4.77066773e-01, -3.88685706e-01,1.57088478e+00, -3.29649075e-01],
      [ 6.05227814e-01,  1.92094819e+00,  1.83406502e-01,-9.18803233e-01,  1.30180543e-01],
      [ 3.08437216e-01,  3.07719920e-01, -2.12886661e+00,-1.20396225e+00, -2.11142931e+00]])
'''这样的数据形式很难看出存储的是什么样的数据,并且也很难获取相应的数据,比如要获取某个指定股票的数据,就很难获取'''
#numpy只是负责数据运算
pandas生成既有行索引又有列索引的数据
#使用pandas的数据结构
import pandas as pd
stock_change = pd.DataFrame(stock_change)
stock_change

0 1 2 3 4
0 0.309832 -0.644090 -0.742092 -1.003895 -0.929964
1 0.417610 -0.517722 0.910264 -1.446833 -0.804855
2 1.183603 -0.884039 1.068103 0.863983 -0.562418
3 0.315805 0.364772 0.923782 -1.421325 0.082067
4 0.236273 0.488066 -0.837882 -1.523267 -0.489978
5 -0.616132 -0.371062 0.853025 0.276212 0.941449
6 -0.731422 -1.780009 0.195037 -0.685665 0.572221
7 1.307805 -1.740956 1.430240 0.979867 1.229524
8 0.430395 -0.663458 0.731798 -0.380059 -0.020449
9 -0.816317 -0.689241 -2.011611 1.007868 -1.303227

#指定行内索引
#添加行索引,构造列表生成式
stock = ["股票{}".format(i) for i in range(10)]
#给股票添加行索引
stock_change = pd.DataFrame(stock_change,index=stock)
stock_change
0 1 2 3 4
股票0 NaN NaN NaN NaN NaN
股票1 NaN NaN NaN NaN NaN
股票2 NaN NaN NaN NaN NaN
股票3 NaN NaN NaN NaN NaN
股票4 NaN NaN NaN NaN NaN
股票5 NaN NaN NaN NaN NaN
股票6 NaN NaN NaN NaN NaN
股票7 NaN NaN NaN NaN NaN
股票8 NaN NaN NaN NaN NaN
股票9 NaN NaN NaN NaN NaN

#添加列索引
date = pd.date_range(start='20180101',periods=5,freq='B')
stock_change=pd.DataFrame(stock_change,index=stock,columns=date)
2018-01-01 2018-01-02 2018-01-03 2018-01-04 2018-01-05
股票0 NaN NaN NaN NaN NaN
股票1 NaN NaN NaN NaN NaN
股票2 NaN NaN NaN NaN NaN
股票3 NaN NaN NaN NaN NaN
股票4 NaN NaN NaN NaN NaN
股票5 NaN NaN NaN NaN NaN
股票6 NaN NaN NaN NaN NaN
股票7 NaN NaN NaN NaN NaN
股票8 NaN NaN NaN NaNNaN
股票9NaNNaNNaNNaNNaN

'''
总结:dataframe结构是既有行索引又有列索引的
'''

 

  • 2.dataframe的属性

#index
行索引
data.index

stock_change.index
Index(['股票0', '股票1', '股票2', '股票3', '股票4', '股票5', '股票6', '股票7', '股票8', '股票9'], dtype='object')
#columns
列索引
data.columns

stock_change.columns
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
              '2018-01-05'],
             dtype='datetime64[ns]', freq='B')
#values
直接获取区中array的值
data.values

stock_change.values
array([[nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan],
      [nan, nan, nan, nan, nan]])
#T 转置
stock_change.T
股票0 股票1 股票2 股票3 股票4 股票5 股票6 股票7 股票8 股票9
2018-01-01 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2018-01-02 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2018-01-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2018-01-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2018-01-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
#方法
head 表的前面几行 默认5行
data.head(3) #指定返回行数
tail 后面几行
data.tail() 默认5行

 

  • 3.dataframe的索引设置

#修改行列索引值
eg:股票2修改为股票88
stock_change.index[2]='股票88' #不能单独修改索引
stock_ = ["股票_{}".format(i) for i in range(10)] #中括号生成列表
#重设索引
data.reset_index() #原来的列当成数据 加参数drop=true
#设置新索引(以某列值设置为新的索引)
df = pd.DataFrame({
   'month':[1,4,7,10],
   'year':[2012,2014,2016,2018],
   'sale':[55,40,84,31]
})

month year sale
0 1 2012 55
1 4 2014 40
2 7 2016 84
3 10 2018 31
#月份设置为新的索引
df.set_index("month",drop=True)
year sale
month
1 2012 55
4 2014 40
7 2016 84
10 2018 31

 

  • 4.1.4 multiindex与panel

    • 1.multiindex

multiindex 多级或分层索引对象
#设置多个索引
new=df.set_index(["year","month"])#中间是列表格式 缺少中括号则运行结果不正确


index属性
 names:levels的名称
 levels:每个level的元组值

 df.names
 frozenlist('year','month')
 df.index.levels
 frozenlist([[2012,2012,2014],[1,4,7,10]])
  • 4.1.5 series

    • 1.创建series

posted @ 2022-11-29 12:37  内阁首辅  阅读(112)  评论(0)    收藏  举报