pandas基础(附思维导图)

  1. 2016-6-7:第一次学习。
  2. 2016-8-24:第二次学习,添加思维导图。



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

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. # 重新索引时,也可以指定一个填充值
  6. DataFrame和Series之间的运算:
    • 默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播。
    • 如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集。
    • 如果你希望匹配行且在列上广播,则必须使用算术运算方法。(传入的轴号就是希望匹配的轴)
      1. series3 = frame['d']
      2. frame.sub(series3, axis=0)
  7. 函数应用和映射:
    • NumPy的ufuncs(元素级数组方法)可用于操作pandas对象(如np.abs)
    • DataFrame的apply方法:将函数应用到由各列或行所形成的一维数组上
    • 许多最为常见的数组统计功能都被实现成DataFrame的方法(如sum和mean),因此无需使用apply方法
    • 除标量值外,传递给apply的函数还可以返回由多个值组成的Series
    • applymap方法:对frame中各个值格式化字符串(Series有一个用于应用元素级函数的map方法)
  8. 排序和排名:
    • sort_index方法:对行或列索引进行排序(按字典顺序);对于DataFrame,可以根据任意一个轴上的索引进行排序(axis=1);数据默认是按升序排序的,但也可以降序排序(ascending=False)
    • order方法:按值对Series进行排序;在排序时,任何缺失值默认都会被放到Series的末尾
    • sort_values方法:对于DataFrame,将一个或多个列的名字(组成列表)传递给by选项,可以根据一个或多个列中的值进行排序
    • rank方法:适用于Series和DataFrame;
  9. 带有重复值的轴索引:
    • is_unique属性:查看索引的值是否是唯一
    • 对于带有重复值的索引,数据选取的行为将会有些不同。如果某个索引对应多个值,则返回一个Series;而对应单个值的,则返回一个标量值。
  10. 汇总和计算描述统计:



  11. 相关系数与协方差:
    • Series的 corr 方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。与此类似,cov用于计算协方差。
    • DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数:
      • 传入一个Series将会返回一个相关系数值Series(针对各列进行计算)
      • 传入一个DataFrame则会计算按列名配对的相关系数
  12. 唯一值、值计数以及成员资格:

  13. 处理缺失数据:
    • pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失数据。
    • Python内置的None值也会被当做NA处理

  14. 滤除缺失数据:
    • 对于一个Series:
      • dropna返回一个仅含非空数据和索引值的Series
      • 通过布尔型索引
    • 对于DataFrame:
      • dropna默认丢弃任何含有缺失值的行
      • 传入how='all'将只丢弃全为NA的那些行
      • 要用这种方式丢弃列,只需传入axis=1即可
      • thresh参数:留下一部分观测数据,thresh为非NaN值的最少个数
  15. 填充缺失数据:
    • fillna方法:
      • 通过一个常数调用就会将缺失值替换为那个常数值
      • 通过一个字典调用fillna,就可以实现对不同的列填充不同的值(键名对应列标签)
      • fillna默认会返回新对象,但也可以对现有对象进行就地修改:参数 inplace=True
      • 对reindex有效的那些插值方法也可用于fillna(如method='ffill')
      • 通过函数调用fillna可以实现很多功能,比如说,你可以传入Series的平均值或中位数

  16. 层次化索引:
    • 能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低维度形式处理高维度数据。
    • 选取数据子集:
      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()的结果),数据选取操作的性能要好很多。
  17. 根据级别汇总统计:
    • 许多对DataFrame和Series的描述和汇总统计都有一个level选项,它用于指定在某条轴上求和的级别。
  18. 使用DataFrame的列:
    • set_index:将DataFrame的一个或多个列转化成行索引
    • reset_index:层次化索引的级别会被转移到列里面
  19. 整数索引:
    • 如果你的轴索引含有索引器,那么根据整数进行数据选取的操作将总是面向标签的。这也包括用ix进行切片
    • 如果你需要可靠的、不考虑索引类型的、基于位置的索引,可以使用iloc方法
  20. 面板数据:
    • 三维版的DataFrame
    • Panel中的每一项(类似于DataFrame的列)都是一个DataFrame









posted @ 2016-06-07 14:17  woaielf  阅读(13016)  评论(0编辑  收藏  举报