• 【Python】Pandas(学习笔记)


    一、Pandas概述

    1、Pandas介绍

    2008年WesMcKinney开发出的库,专门用于数据挖掘的开源python库

    Numpy为基础,借力Numpy模块在计算方面性能高的优势

    基于matplotib,能够简便的画图

    独特的数据结构

    import pandas as pd
    
    • 1

    2、Pandas优势

    • 便捷的数据处理能力
    • 读取文件方便
    • 封装了Matplotlib、Numpy的画图和计算

    二、数据类型

    1、DataFrame

    1)结构

    既有行索引、又有列索引的二维数组

    • 行索引,表明不同行,横向索引,叫index
    • 列索引,表明不同列,纵向索引,叫columns

    2)初识

    import numpy as np
    import pandas as pd
    stock = np.random.normal(0, 1, (10,5))
    hang = ["股票{}".format(i) for i in range(10)] 
    lie = pd.date_range(start="20180101", periods=5, freq="B")
    
    df = pd.DataFrame(stock, index=hang, columns=lie)
    df.head()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    3)属性

    属性属性名
    shape形状
    index行索引列表
    columns列索引列表
    values直接获取其中 array 的值
    T行列转置

    4)方法

    # 开头几行(默认5)
    df.head(n)
    # 最后几行
    df.tail(n)
    
    • 1
    • 2
    • 3
    • 4

    5)索引的设置

    1. 修改行列索引值

    不能单独修改索引

    stock_ = ["股票_{}".format(i) for i in range(10)]
    data.index = stock_
    
    • 1
    • 2

    2. 重设索引

    把原始索引删除(True)或当成普通列(False),重设索引

    data.reset_index()
    data.reset_index(drop=True)		# drop=True把之前的索引删除
    
    • 1
    • 2

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    3. 设置新索引
    df1 = pd.DataFrame({'month': [1, 4, 7, 10],
                        'year': [2012, 2014, 2013, 2014],
                        'sale':[55, 40, 84, 31]})
    # 以月份设置新的索引
    df1.set_index("month", drop=True)
    # 设置多个索引,以年和月份
    df1.set_index(["year", "month"])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、MultiIndex

    多级或分层索引对象

    • names:levels 的名称
    • levels:每个 level 的元组值
    df2.index
    df2.index.names
    df2.index.levels
    
    • 1
    • 2
    • 3

    3、Panel

    存储三维数组的容器

    Panel 是 DataFrame 的容器 => 每个维度都是一个DataFrame

    注:Pandas 从版本 0.20.0 开始弃用,推荐的用于表示 3D 数据的方法是 DataFrame 上的 MultiIndex 方法

    4、Series

    带索引的一维数组

    DataFrame 是 Series 的容器

    sr = data.iloc[1, :]
    
    # 索引
    sr.index
    # 值
    sr.values
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    三、数据操作

    1、索引操作

    # 直接索引 必须先列后行
    data["open"]["2018-02-26"]
    
    # 按名字索引
    data.loc["2018-02-26"]["open"]
    data.loc["2018-02-26", "open"]
    
    # 数字索引
    data.iloc[1, 0]
    
    # 组合索引
    data.loc[data.index[0:4], ['open', 'close', 'high', 'low']]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2、赋值操作

    data.open = 100
    data.iloc[1, 0] = 120
    
    • 1
    • 2

    3、排序操作

    1)内容排序

    # 单列内容排序
    # ascending=False:降序、True:升序
    data.sort_values(by="open", ascending=False)
    
    # 多个列内容排序
    data.sort_values(by=["open", "high"], ascending=False).head()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2)索引排序

    data.sort_index()
    
    • 1

    四、DataFrame运算

    1、算术运算

    data["open"] + 3
    data["open"].add(3)
    
    data.sub(100)
    data - 100
    
    data["close"] - data["open"]
    data["close"].sub(data["open"])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、逻辑运算

    data[data["p_change"] > 2]
    data[(data["p_change"] > 2) & (data["low"] > 15)]
    
    # query(expr) expr:查询字符串
    data.query("p_change > 2 & low > 15")
    # isin(values) 判断是否为 values
    data[data["turnover"].isin([4.19, 2.39])]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、统计运算

    describe()综合分析:能够直接得出很多统计结果,count,mean,std,min,max 等

    data.describe()	# 综合分析
    data.max()		# 最大值
    data.idxmax() 	# 最大值位置
    
    • 1
    • 2
    • 3

    4、累计统计函数

    • cumsum 计算前 1/2/3/…/n 个数的和
    • cummax 计算前 1/2/3/…/n 个数的最大值
    • cummin 计算前 1/2/3/…/n 个数的最小值
    • cumprod 计算前 1/2/3/…/n 个数的积
    data["p_change"].sort_index().cumsum()
    data["p_change"].sort_index().cumsum().plot()
    
    • 1
    • 2

    5、自定义运算

    apply(func, axis=0)
    
    • 1
    • func:自定义函数
    • axis=0:默认按列运算,axis=1:按行运算
    data.apply(lambda x: x.max() - x.min())
    
    • 1

    五、Pandas画图

    1、DataFrame

    DataFrame.plot(x=None, y=None, kind='line')
    
    • 1
    • x: 标签或位置,默认为“无”
    • y: 标签、位置或标签列表、位置。默认无标签
      • 允许打印一列与另一列
    • kind: str
      • ‘line’: 折线图(default)
      • ''bar": 条形图
      • “barh”: 水平条形图
      • “hist”: 直方图
      • “pie”: 饼图
      • “scatter”: 散点图
    data.plot(x="volume", y="turnover", kind="scatter")
    
    • 1

    2、Series

    sr.plot()
    
    • 1

    六、文件读取与存储

    1、读取CSV

    # 读取数据表,并指定读哪些列
    data = pd.read_csv("./stock_day/stock_day.csv", usecols=["high", "low", "open", "close"])
    
    # 如果数据表的列没有列名,用names传入列名
    data = pd.read_csv("stock_day2.csv", names=["open", "high", "close"]) 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、保存CSV

    # 保存open列的数据
    data[:10].to_csv("test.csv", columns=["open"]) 
    
    # index=False不要行索引
    # header=False不要列索引
    # mode="a"追加模式|mode="w"重写
    data[:10].to_csv("test.csv", columns=["open"], index=False, mode="a", header=False) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    常用设计模式——策略模式
    C# HttpClient 实现HTTP Client 请求
    html table 如何导出为excel表格案例分享
    上周热点回顾(7.24-7.30)
    矿产行业供应链协同系统解决方案:构建数智化平台,保障矿产资源安全供应
    PostgreSQL 同步复制原理解析
    【python】基础复习
    github action 基于个人项目实践
    Python模块psutil:系统进程管理与Selenium效率提升的完美结合
    春秋云境CVE-2018-20604
  • 原文地址:https://blog.csdn.net/wmh1024/article/details/134383010