• 十分钟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画图。

  • 相关阅读:
    Qt编译出错:“Cannot find file...... .pro."
    谈论如何有效地保护你的数据
    购书网
    VC非模态对话框创建和销毁
    在GUI程序中使用控制台的两种方法
    fatal error C1010: unexpected end of file while looking for precompiled header directive
    burp抓取手机包
    为firefox添加flash插件
    msfvenom生成linux后门
    kali下操作 Apache2
  • 原文地址:https://www.cnblogs.com/luminous-Xin/p/14863794.html
Copyright © 2020-2023  润新知