学习目标

  • 目标
    • 记忆DataFrame的形状、行列索引名称获取等基本属性
    • 应用Series和DataFrame的索引进行切片获取
    • 应用sort_index和sort_values实现索引和值的排序

为了更好的理解这些基本操作,我们将读取一个真实的股票数据。关于文件操作,后面在介绍,这里只先用一下API

  1. # 读取文件
  2. data = pd.read_csv("./data/stock_day.csv")
  3. # 删除一些列,让数据更简单些,再去做后面的操作
  4. data = data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"], axis=1)

stockday.png

1 索引操作

Numpy当中我们已经讲过使用索引选取序列和切片选择,pandas也支持类似的操作,也可以直接使用列名、行名
称,甚至组合使用。

1.1 直接使用行列索引(先列后行)

获取’2018-02-27’这天的’close’的结果

  1. # 直接使用行列索引名字的方式(先列后行)
  2. data['open']['2018-02-27']
  3. 23.53
  4. # 不支持的操作
  5. # 错误
  6. data['2018-02-27']['open']
  7. # 错误
  8. data[:1, :2]

1.2 结合loc或者iloc使用索引

获取从’2018-02-27’:’2018-02-22’,’open’的结果

  1. # 使用loc:只能指定行列索引的名字
  2. data.loc['2018-02-27':'2018-02-22', 'open']
  3. 2018-02-27 23.53
  4. 2018-02-26 22.80
  5. 2018-02-23 22.88
  6. Name: open, dtype: float64
  7. # 使用iloc可以通过索引的下标去获取
  8. # 获取前3天数据,前5列的结果
  9. data.iloc[:3, :5]
  10. open high close low
  11. 2018-02-27 23.53 25.88 24.16 23.53
  12. 2018-02-26 22.80 23.78 23.53 22.80
  13. 2018-02-23 22.88 23.37 22.82 22.71

1.3 使用ix组合索引

Warning:Starting in 0.20.0, the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers.

获取行第1天到第4天,[‘open’, ‘close’, ‘high’, ‘low’]这个四个指标的结果

  1. # 使用ix进行下表和名称组合做引
  2. data.ix[0:4, ['open', 'close', 'high', 'low']]
  3. # 推荐使用loc和iloc来获取的方式
  4. data.loc[data.index[0:4], ['open', 'close', 'high', 'low']]
  5. data.iloc[0:4, data.columns.get_indexer(['open', 'close', 'high', 'low'])]
  6. open close high low
  7. 2018-02-27 23.53 24.16 25.88 23.53
  8. 2018-02-26 22.80 23.53 23.78 22.80
  9. 2018-02-23 22.88 22.82 23.37 22.71
  10. 2018-02-22 22.25 22.28 22.76 22.02

2 赋值操作

对DataFrame当中的close列进行重新赋值为1

  1. # 直接修改原来的值
  2. data['close'] = 1
  3. # 或者
  4. data.close = 1

3 排序

排序有两种形式,一种对于索引进行排序,一种对于内容进行排序

3.1 DataFrame排序

  • 使用df.sort_values(by=, ascending=)

    • 单个键或者多个键进行排序,
    • 参数:
      • by:指定排序参考的键
      • ascending:默认升序
        • ascending=False:降序
          1. # 按照开盘价大小进行排序 , 使用ascending指定按照大小排序
          2. data.sort_values(by="open", ascending=True).head()
          排序举例1.png
          1. # 按照多个键进行排序
          2. data.sort_values(by=['open', 'high'])
          排序举例2.png
  • 使用df.sort_index给索引进行排序

这个股票的日期索引原来是从大到小,现在重新排序,从小到大

  1. # 对索引进行排序
  2. data.sort_index()

排序举例3.png

3.2 Series排序

  • 使用series.sort_values(ascending=True)进行排序

series排序时,只有一列,不需要参数

  1. data['p_change'].sort_values(ascending=True).head()
  2. 2015-09-01 -10.03
  3. 2015-09-14 -10.02
  4. 2016-01-11 -10.02
  5. 2015-07-15 -10.02
  6. 2015-08-26 -10.01
  7. Name: p_change, dtype: float64
  • 使用series.sort_index()进行排序

与df一致

  1. # 对索引进行排序
  2. data['p_change'].sort_index().head()
  3. 2015-03-02 2.62
  4. 2015-03-03 1.44
  5. 2015-03-04 1.57
  6. 2015-03-05 2.02
  7. 2015-03-06 8.51
  8. Name: p_change, dtype: float64

4 总结

  • 1.索引【掌握】
    • 直接索引 — 先列后行,是需要通过索引的字符串进行获取
    • loc — 先行后列,是需要通过索引的字符串进行获取
    • iloc — 先行后列,是通过下标进行索引
    • ix — 先行后列, 可以用上面两种方法混合进行索引
  • 2.赋值【知道】
    • data[“”] = **
    • data. =
  • 3.排序【知道】
    • dataframe
      • 对象.sort_values()
      • 对象.sort_index()
    • series
      • 对象.sort_values()
      • 对象.sort_index()