zoukankan      html  css  js  c++  java
  • pandas思维导图

     
     
     
    pandas 两个主要数据结构:Series 和 DataFrame。(建议引入本地)
     

    Series:

    • 类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成
    • 通过Series 的 values 和 index 属性获取其数组表示形式和索引对象
    • 可以为数据指定索引,通过索引的方式选取Series中的单个或一组值
    • NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接
    • 可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射
    • 可以直接通过字典来创建Series
    • Series的索引可以通过赋值的方式(列表)就地修改
    • Series对象本身及其索引都有一个name属性,可直接赋值修改
     
    DataFrame:
    • 表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。
    • 构建DataFrame,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典。
    • DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列。(如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列)
    • 跟Series一样,如果传入的列在数据中找不到,就会产生NA值。
    • 通过类似字典标记的方式或属性的方式获取列
    • 赋值给列:将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值
    • 为不存在的列赋值会创建出一个新列。
    • 关键字del用于删除列。
    • 通过索引方式返回的列只是相应数据的视图而已,并不是副本。(通过Series的copy方法即可显式地复制列)
    • 传入嵌套字典:外层字典的键作为列,内层键则作为行索引
    • 可以设置DataFrame的 index 和 columns 的 name 属性
     
    pandas的索引对象:
    • 轴标签和其他元数据(比如轴名称等)
    • Index对象是不可修改的,这样才能使Index对象在多个数据结构之间安全共享
    • 本质是一个由Python对象组成的Numpy数组
     
    Series 和 DataFrame 中的数据的基本功能:
      1. 重新索引(reindex):
        • 创建一个适应新索引的新对象,将会根据新索引进行重排。如果某个索引值当前不存在,就引入缺失值
        • 对于时间序列这样的有序数据,重新索引时可能需要做一些插值处理。method选项:ffill / pad可以实现前向值填充;bfill / backfill 实现后向填充
        • 对于DataFrame,reindex可以修改(行)索引、列,或两个都修改。(如果仅传入一个序列,则会重新索引行;使用columns关键字即可重新索引列)
        • 插值则只能按行应用(即轴0
        • 利用ix的标签索引功能,重新索引任务可以变得更简洁
      2. 丢弃指定轴上的项(drop):
        • drop方法返回的是一个在指定轴上删除了指定值的新对象
        • 对于DataFrame,可以删除任意轴上的索引值(轴1需加上参数:axis=1)
      3. 索引、选取和过滤:
        • Series索引(obj[...])可以是标签或整数
        • 利用标签的切片运算其末端是包含的。(整数则不包含末端)
        • 对DataFrame进行索引其实就是获取一个或多个(用列标签) data[['three', 'one']]
        • DataFrame选取要通过切片或者布尔型数组或者索引字段ix


      4. 算术运算和数据对齐:
        • 在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播。
      5. 在算术方法中填充值:
        • 在对不同索引的对象进行算术运算时,当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(比如0)
        • add,加法;sub,减法;div,除法;mul,乘法
    1. df1 = DataFrame(np.arange(12.).reshape((3, 4)), columns=list('abcd'))
    2. df2 = DataFrame(np.arange(20.).reshape((4, 5)), columns=list('abcde'))
    3. # 使用df1的add方法,传入df2以及一个fill_value参数
    4. df1.add(df2, fill_value=0)
    5. # 重新索引时,也可以指定一个填充值
    1. DataFrame和Series之间的运算:
      • 默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播。
      • 如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集。
      • 如果你希望匹配行且在列上广播,则必须使用算术运算方法。(传入的轴号就是希望匹配的轴)
        1. series3 = frame['d']
        2. frame.sub(series3, axis=0)
    2. 函数应用和映射:
      • NumPy的ufuncs(元素级数组方法)可用于操作pandas对象(如np.abs)
      • DataFrame的apply方法:将函数应用到由各列或行所形成的一维数组上
      • 许多最为常见的数组统计功能都被实现成DataFrame的方法(如sum和mean),因此无需使用apply方法
      • 除标量值外,传递给apply的函数还可以返回由多个值组成的Series
      • applymap方法:对frame中各个值格式化字符串(Series有一个用于应用元素级函数的map方法)
    3. 排序和排名:
      • sort_index方法:对行或列索引进行排序(按字典顺序);对于DataFrame,可以根据任意一个轴上的索引进行排序(axis=1);数据默认是按升序排序的,但也可以降序排序(ascending=False)
      • order方法:按值对Series进行排序;在排序时,任何缺失值默认都会被放到Series的末尾
      • sort_values方法:对于DataFrame,将一个或多个列的名字(组成列表)传递给by选项,可以根据一个或多个列中的值进行排序
      • rank方法:适用于Series和DataFrame;
    4. 带有重复值的轴索引:
      • is_unique属性:查看索引的值是否是唯一
      • 对于带有重复值的索引,数据选取的行为将会有些不同。如果某个索引对应多个值,则返回一个Series;而对应单个值的,则返回一个标量值。
    5. 汇总和计算描述统计:
    6. 相关系数与协方差:
      • Series的 corr 方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。与此类似,cov用于计算协方差。
      • DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数:
        • 传入一个Series将会返回一个相关系数值Series(针对各列进行计算)
        • 传入一个DataFrame则会计算按列名配对的相关系数
    7. 唯一值、值计数以及成员资格:
    8. 处理缺失数据:
      • pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失数据。
      • Python内置的None值也会被当做NA处理
    9. 滤除缺失数据:
      • 对于一个Series:
        • dropna返回一个仅含非空数据和索引值的Series
        • 通过布尔型索引
      • 对于DataFrame:
        • dropna默认丢弃任何含有缺失值的行
        • 传入how='all'将只丢弃全为NA的那些行
        • 要用这种方式丢弃列,只需传入axis=1即可
        • thresh参数:留下一部分观测数据,thresh为非NaN值的最少个数
    10. 填充缺失数据:
      • fillna方法:
        • 通过一个常数调用就会将缺失值替换为那个常数值
        • 通过一个字典调用fillna,就可以实现对不同的列填充不同的值(键名对应列标签)
        • fillna默认会返回新对象,但也可以对现有对象进行就地修改:参数 inplace=True
        • 对reindex有效的那些插值方法也可用于fillna(如method='ffill')
        • 通过函数调用fillna可以实现很多功能,比如说,你可以传入Series的平均值或中位数
    11. 层次化索引:
      • 能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低维度形式处理高维度数据。
      • 选取数据子集:
        1. data = Series(np.random.randn(10),
        2. index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
        3. [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
        4. data['b']
        5. data['b':'c']
        6. data.ix[['b', 'd']]
        7. # 在“内层”中进行选取,a,b,c,d各层下的'2'标签
        8. data[:, 2]
      • 重排分级顺序:
        • swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不会发生变化)
        • sortlevel则根据单个级别中的值对数据进行排序(稳定的)。交换级别时,常常也会用到sortlevel,这样最终结果就是有序的了。
        • 在层次化索引的对象上,如果索引是按字典方式从外到内排序(即调用sortlevel(0)或sort_index()的结果),数据选取操作的性能要好很多。
    12. 根据级别汇总统计:
      • 许多对DataFrame和Series的描述和汇总统计都有一个level选项,它用于指定在某条轴上求和的级别。
    13. 使用DataFrame的列:
      • set_index:将DataFrame的一个或多个列转化成行索引
      • reset_index:层次化索引的级别会被转移到列里面
    14. 整数索引:
      • 如果你的轴索引含有索引器,那么根据整数进行数据选取的操作将总是面向标签的。这也包括用ix进行切片
      • 如果你需要可靠的、不考虑索引类型的、基于位置的索引,可以使用iloc方法
    15. 面板数据:
      • 三维版的DataFrame
      • Panel中的每一项(类似于DataFrame的列)都是一个DataFrame
     源:https://www.cnblogs.com/woaielf/p/5566820.html
  • 相关阅读:
    vue.js 源代码学习笔记 ----- 工具方法 option
    日期字符串格式转换
    MySQL数据库的知识总结
    Mybatis 中#{}和${}的区别
    MySQL数据库 常用命令
    MySQL -进阶
    JQuery杂项方法
    ASP.NET MVC 扩展自定义视图引擎支持多模板&动态换肤skins机制
    C#各种导入Excel文件的数据的方法总结
    C#基础随手笔记之基础操作优化
  • 原文地址:https://www.cnblogs.com/a00ium/p/13909830.html
Copyright © 2011-2022 走看看