十分钟Pandas快速入门--机器学习基础(python)(二)

@

基本数据操作

本文基本数据操作数据准备:

# 创建一个符合均匀分布的数据集(634,7)
import numpy as np
import pandas as pd 

# 生成数据
data = np.random.uniform(-20,20, (634,7))

# 生成行索引
date = pd.date_range(start="20210601", periods=634, freq="B")
# 生成列索引
stock_name = ["open","high","close","low","volume","price_change","p_change"]
# 将数据加载到DataFrame中,并加上行列索引
data = pd.DataFrame(data, index = date, columns=stock_name)
data

下面展示部分生成数据
在这里插入图片描述

一、索引操作

  pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
  Numpy当中我们已经讲过使用索引选取序列和切片选择,pandas也支持类似的操作,也可以直接使用列名、行名称,甚至组合使用。

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

获取‘2021-06-04’这天的close的结果

# 注意先列后行
data["close"]["2021-06-04"]

# output
#  -1.0426990669399316

结合loc或者iloc使用索引

若想要先行后列
获取"2021-06-01"至"2021-06-06",‘close’的数据

# 二者输出结果相同
data.loc["2021-06-04"]["close"]
data.loc["2021-06-04","close"]
# output
#  -1.0426990669399316

# 使用iloc可直接使用数字索引
data.iloc[3,2]
# output
#  -1.0426990669399316

# 组合索引
data.ix[:4,["open", "close", "high", "low"]]

组合索引输出:
在这里插入图片描述
但是这种组合版本在以后的版本中会被取消

DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

但是我们仍有办法使用组合索引:

# 使用loc来使用组合索引
data.loc[data.index[0:4],["open", "close", "high", "low"]]
# 使用iloc来使用组合索引
data.iloc[:4,data.columns.get_indexer(["open", "close", "high", "low"])]

返回结果与 ix 组合索引一样
在这里插入图片描述

二、赋值与排序

赋值

例如:对DataFrame中的close列重新赋值为1

# 直接修改原来的值
new_data1 = data
new_data["close"] = 1

# 或者
new_data2 = data 
new_data2.close = 1

new_data1.head(5)
new_data2.head(5)

返回结果:
在这里插入图片描述

排序

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

DataFrame

  • 使用df.sort_values(key = , ascending = ) 对内容进行排序
    -- 单个键或者多个键惊醒排序,默认升序
    -- ascending=False :降序
    -- ascending=True :升序
  • sort_index()
    -- 按照索引进行排序
  • 使用series.sort_values(ascending=True) 对内容进行排序
    -- series排序时,只有一列,不需要参数
# 按 p_change进行排序
data = data.sort_values(by="p_change", ascending=True)
# 先按 high 进行排序, 再按 p_change进行排序
data = data.sort_values(by=["high","p_change"])
# 使用sort_index进行排序,按照日期索引从大到小排序,或从小到大排序
data = data.sort_index()
# Series
# 使用series.sort_values(ascending=True) 对内容进行排序
# series排序时,只有一列,不需要参数 
data["p_change"].sort_values(ascending=True).head(
# 2022-10-20   -19.919984
# 2022-05-11   -19.919346
# 2023-02-06   -19.912896
# 2021-07-21   -19.886578
# 2021-09-07   -19.876232
# Name: p_change, dtype: float64

# 使用series.sort_index() 对索引进行排序
data["p_change"].sort_index().head()

# 2021-06-01    16.871168
# 2021-06-02     8.089420
# 2021-06-03   -10.253883
# 2021-06-04    -3.903694
# 2021-06-07    16.020016
# Name: p_change, dtype: float64

三、DataFrame的运算

  注意:以下的运算操作对于DataFrame与series都适用

算术运算

# dataframe的加减乘除运算

# 加
data.add(10)
data + 10 

# 减
data.sub(10)
data - 10
# 如果想要得到每天的涨跌大小?求出每天close - open价格差
#    1. 筛选两列数据
close = data.close
open = data.open
#    2. 收盘价减去开盘价
data['m_price_change'] = close.sub(open)
data.head()

逻辑运算

1.逻辑运算符号 < 、>、 |、 &

  • 例如筛选p_change > 2 的日期数据
  • data['p_change'] > 2 返回逻辑结果
data["p_change"] > 2

# 输出
2021-06-01     True
2021-06-02    False
2021-06-03     True
2021-06-04     True
2021-06-07     True
2021-06-08     True
2021-06-09    False
2021-06-10     True

# 获取p_change 大于二 且 open 小于 12的 结果
(data["p_change"] > 2) & (data["open"] < 12)

# 利用布尔索引获取
data[(data["p_change"] > 2) & (data["open"] < 12)]

逻辑运算函数

  • query(expr)
  •   expr:查询字符串
    
data.query("p_change > 2 & open > 15" ).head()

输出:
在这里插入图片描述

  • isin(values)
  • 例如判断“close” 是否为-8.343409,8.864481
data[data["open"].isin( [-10.243635090215308,-12.40666134379941])]

在这里插入图片描述

统计运算

1.describe()

综合分析:能够直接得出很多统计结果,count、mean、stf、min、max、等

# 计算平均值、标准差、最大值、最小值
data.describe()

在这里插入图片描述

2.统计函数

  • max() min()
  • std() var() 方差、标准差
  • median()
  • idxmax() idxmin() 求最大值、最小值位置 (对应numpy中的argmax()、 argmin())

累计统计函数

在这里插入图片描述

# 观察p_change的累加走势情况
data.p_change.sort_index().cumsum().plot()

在这里插入图片描述

自定义运算

  • apply(func, axis=0)
  •   func:自定义函数
    
  •   axis=0:默认是列,axis=1为进行行运算
    

例如计算最大值最小值之差:

# 计算最大值最小值之差
data.apply(lambda x: x.max() -x.min(), )

四、pandas画图

pandas.DataFrame.plot()

DataFrame.plot (x=None, y=None, kind='line')

x : label or position,default None
y : label, position or list of label, positions, default None

  • Allows plotting of one column versus another

kind : str

  • ‘line’: line plot (default)
  • "bar": vertical bar plot
  • "barh" : horizontal bar plot
  • "hist” : histogram
  • ‘pie': pie plot
  • 'scatter" : scatter plot
data.plot(x="volume", y= "open", kind="scatter")

在这里插入图片描述

文件的读取与存储

  我们的数据大部分存在于文件当中,所以pandas会支持复杂的IO操作,pandas的Api支持众多的文件格式,如CSV、SQL、XLS、JSON、HDF5

总结

  本文主要介绍了索引操作、复制与排序、DataFrame的运算和pandas画图。

posted @ 2021-06-08 17:37  小怪兽他爹爹  阅读(137)  评论(1编辑  收藏  举报