zoukankan      html  css  js  c++  java
  • 【Pandas-02】告警、axis参数理解、index的用途

    一、SettingWithCopyWarning报警

    数据:

    1 错误复现

    2 原因

    发出警告的代码 df[condition]["wen_cha"] = df["bWendu"]-df["yWendu"]

    相当于:df.get(condition).set(wen_cha),第一步骤的get发出了报警

    链式操作其实是两个步骤,先get后set,get得到的dataframe可能是view也可能是copy,pandas发出警告

    官网文档: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

    核心要诀:pandas的dataframe的修改写操作,只允许在源dataframe上进行,一步到位

    3 解决方法

    解决方法1

    将get+set的两步操作,改成set的一步操作

    解决方法2

    如果需要预筛选数据做后续的处理分析,使用copy复制dataframe

    总之,pandas不允许先筛选子dataframe,再进行修改写入

    要么使用.loc实现一个步骤直接修改源dataframe,建议这种,比较方便

    要么先复制一个子dataframe再一个步骤执行修改,若是为了保存原来的,可以考虑这种。

    二、Pandasaxis参数理解

    axis=0或者"index":

    • 如果是单行操作,就指的是某一行
    • 如果是聚合操作,指的是跨行cross rows

    axis=1或者"columns":

    • 如果是单列操作,就指的是某一列
    • 如果是聚合操作,指的是跨列cross columns

    按哪个axis,就是这个axis要动起来(类似被for遍历),其它的axis保持不动

    数据:

    1 单列drop,就是删除某一列

    2 axis=0/index执行mean聚合操作

    反直觉:输出的不是每行的结果,而是每列的结果

    指定了按哪个axis,就是这个axis要动起来(类似被for遍历),其它的axis保持不动

    同理:指定了按哪个axis,就是这个axis要动起来(类似被for遍历),其它的axis保持不动

    3 再次举例,加深理解

    二、Pandas的索引index的用途

    把数据存储于普通的column列也能用于数据查询,那使用index有什么好处?

    index的用途总结:

    1. 更方便的数据查询;
    2. 使用index可以获得性能提升;
    3. 自动的数据对齐功能;
    4. 更多更强大的数据结构支持;

    实验数据

    1 使用index查询数据

    2 使用index会提升查询性能

    • 如果index是唯一的,Pandas会使用哈希表优化,查询性能为O(1);
    • 如果index不是唯一的,但是有序,Pandas会使用二分查找算法,查询性能为O(logN);
    • 如果index是完全随机的,那么每次查询都要扫描全表,查询性能为O(N);

    实验1:完全随机的顺序查询

    实验2:将index排序后的查询

    3 使用index能自动对齐数据

    4 使用index更多更强大的数据结构支持

    很多强大的索引数据结构

    • CategoricalIndex,基于分类数据的Index,提升性能;
    • MultiIndex,多维索引,用于groupby多维聚合后结果等;
    • DatetimeIndex,时间类型索引,强大的日期和时间的方法支持;
  • 相关阅读:
    v-charts修改点击图例事件,legendselectchanged
    十分钟了解HTTPS
    VUE2+elementUI前端实现 三级省市联动select
    总结前端面试过程中最容易出现的问题
    JS实现快速排序,冒泡排序
    前端面试偏门题总结
    从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!
    Ant通过build-war.xml把一个web项目打包成war
    web项目的.classpath和.project详解
    联合主键三种实现方式
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/14659787.html
Copyright © 2011-2022 走看看