申明:本系列文章是自己在学习《利用Python进行数据分析》这本书的过程中,为了方便后期自己巩固知识而整理。

第一 重新索引

Series的reindex方法

  1. In [15]: obj = Series([3,2,5,7,6,9,0,1,4,8],index=['a','b','c','d','e','f','g',
  2. ...: 'h','i','j'])
  3.  
  4. In [16]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'])
  5.  
  6. In [17]: obj1
  7. Out[17]:
  8. a 3.0
  9. b 2.0
  10. c 5.0
  11. d 7.0
  12. e 6.0
  13. f 9.0
  14. g 0.0
  15. h 1.0
  16. i 4.0
  17. j 8.0
  18. k NaN
  19. dtype: float64

新索引值当前值缺失,则需要插值

前向值填充method=’ffill’,最后索引j对应的值来填充

  1. In [19]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'],metho
  2. ...: d='ffill')
  3.  
  4. In [20]: obj1
  5. Out[20]:
  6. a 3
  7. b 2
  8. c 5
  9. d 7
  10. e 6
  11. f 9
  12. g 0
  13. h 1
  14. i 4
  15. j 8
  16. k 8
  17. dtype: int64

前向值搬运method=’pad’,最后索引j对应的值来填充

  1. In [23]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'],metho
  2. ...: d='pad')
  3.  
  4. In [24]: obj1
  5. Out[24]:
  6. a 3
  7. b 2
  8. c 5
  9. d 7
  10. e 6
  11. f 9
  12. g 0
  13. h 1
  14. i 4
  15. j 8
  16. k 8
  17. dtype: int64

后向值填充method=’bfill’,最后索引j的后面的索引对应的值来填充,j的后一个位置为NaN的空行

In [62]: obj2 = obj.reindex(['a','b','c','d','e','f','g','k','h','i','j'],metho
     ...: d='bfill')

In [63]: obj2
Out[63]:
a    3.0
b    2.0
c    5.0
d    7.0
e    6.0
f    9.0
g    0.0
k    NaN
h    1.0
i    4.0
j    8.0
dtype: float64

后向值搬运method=’backfill’,最后索引j的后面的索引对应的值来填充,j的后一个位置为NaN的空行

  1. In [64]: obj2 = obj.reindex(['a','b','c','d','e','f','g','k','h','i','j'],metho
  2. ...: d='backfill')
  3.  
  4. In [65]: obj2
  5. Out[65]:
  6. a 3.0
  7. b 2.0
  8. c 5.0
  9. d 7.0
  10. e 6.0
  11. f 9.0
  12. g 0.0
  13. k NaN
  14. h 1.0
  15. i 4.0
  16. j 8.0
  17. dtype: float64

DataFrame的reindex方法

修改(行)索引、列,或两个都修改。

引入一个序列,则重新索引行,如下:

  1. In [86]: data = {'class':['语文','数学','英语'],'score':[120,130,140]}
  2.  
  3. In [87]: frame = DataFrame(data)
  4.  
  5. In [88]: frame
  6. Out[88]:
  7. class score
  8. 0 语文 120
  9. 1 数学 130
  10. 2 英语 140
  11.  
  12. In [89]: frame2 = frame.reindex([0,1,2,3])
  13.  
  14. In [90]: frame2
  15. Out[90]:
  16. class score
  17. 0 语文 120.0
  18. 1 数学 130.0
  19. 2 英语 140.0
  20. 3 NaN NaN

行、列 都修改

  1. In [94]: frame3 = frame.reindex(index=[11,22,33],columns = ['a','b','c','d'])
  2.  
  3. In [95]: frame3
  4. Out[95]:
  5. a b c d
  6. 11 NaN NaN NaN NaN
  7. 22 NaN NaN NaN NaN
  8. 33 NaN NaN NaN NaN

reindex的参数如下:

第二 删除指定轴(索引)上的项

Series

  1. In [112]: obj = Series([1,2,3,4],index=['a','b','c','d'])
  2.  
  3. In [113]: obj
  4. Out[113]:
  5. a 1
  6. b 2
  7. c 3
  8. d 4
  9. dtype: int64
  10.  
  11. In [114]: obj1 = obj.drop('c')
  12.  
  13. In [115]: obj1
  14. Out[115]:
  15. a 1
  16. b 2
  17. d 4
  18. dtype: int64

DataFrame

删除单索引行

  1. In [109]: frame
  2. Out[109]:
  3. class score
  4. 0 语文 120
  5. 1 数学 130
  6. 2 英语 140
  7.  
  8. In [110]: obj = frame.drop(0)
  9.  
  10. In [111]: obj
  11. Out[111]:
  12. class score
  13. 1 数学 130
  14. 2 英语 140

删除多索引行

  1. In [119]: frame
  2. Out[119]:
  3. class score
  4. 0 语文 120
  5. 1 数学 130
  6. 2 英语 140
  7.  
  8. In [120]: frame.drop([1,2])
  9. Out[120]:
  10. class score
  11. 0 语文 120

删除多索引行(带axis)

  1. In [130]: frame
  2. Out[130]:
  3. class score
  4. 0 语文 120
  5. 1 数学 130
  6. 2 英语 140
  7.  
  8. In [131]: frame.drop([1,2],axis=0)
  9. Out[131]:
  10. class score
  11. 0 语文 120

删除列(columns)(带axis)

  1. In [135]: frame
  2. Out[135]:
  3. class score
  4. 0 语文 120
  5. 1 数学 130
  6. 2 英语 140
  7.  
  8. In [136]: frame.drop(['class'],axis=1)
  9. Out[136]:
  10. score
  11. 0 120
  12. 1 130
  13. 2 140

其中,axis=0,表示行,axis=1,表示列

第三 索引、选取与过滤

Series

  1. In [1]: from pandas import Series,DataFrame
  2.  
  3. In [2]: obj = Series([1,2,3,4],index=['a','b','c','d'])
  4.  
  5. In [3]: obj
  6. Out[3]:
  7. a 1
  8. b 2
  9. c 3
  10. d 4
  11. dtype: int64
  12.  
  13. In [4]: obj[1]
  14. Out[4]: 2
  15.  
  16. In [5]: obj['c']
  17. Out[5]: 3
  18.  
  19. In [6]: obj[1:2]
  20. Out[6]:
  21. b 2
  22. dtype: int64
  23.  
  24. In [7]: obj[2:4]
  25. Out[7]:
  26. c 3
  27. d 4
  28. dtype: int64

DataFrame

  1. In [13]: from pandas import DataFrame,Series
  2.  
  3. In [14]: data = DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns
  4. ...: =['aa','bb','cc'])
  5.  
  6. In [15]: data
  7. Out[15]:
  8. aa bb cc
  9. a 1 2 3
  10. b 4 5 6
  11. c 7 8 9

索引方式一

  1. In [16]: data['bb']
  2. Out[16]:
  3. a 2
  4. b 5
  5. c 8
  6. Name: bb, dtype: int64

索引方式二

  1. In [19]: data[:2]
  2. Out[19]:
  3. aa bb cc
  4. a 1 2 3
  5. b 4 5 6

索引方式三

  1. In [20]: data[data<4]
  2. Out[20]:
  3. aa bb cc
  4. a 1.0 2.0 3.0
  5. b NaN NaN NaN
  6. c NaN NaN NaN
  7.  
  8. In [21]: data[data<4]=0
  9.  
  10. In [22]: data
  11. Out[22]:
  12. aa bb cc
  13. a 0 0 0
  14. b 4 5 6
  15. c 7 8 9

索引方式四

  1. In [24]: data.ix[:2,['aa','cc']]
  2. Out[24]:
  3. aa cc
  4. a 0 0
  5. b 4 6

第四 算术运算与数据对齐

Series

  1. In [36]: a1
  2. Out[36]:
  3. a 1
  4. b 2
  5. c 3
  6. d 4
  7. e 5
  8. dtype: int64
  9.  
  10. In [37]: a2
  11. Out[37]:
  12. a 2
  13. b 3
  14. c 4
  15. f 5
  16. g 6
  17. dtype: int64

a1+a2

  1. In [38]: a1+a2
  2. Out[38]:
  3. a 3.0
  4. b 5.0
  5. c 7.0
  6. d NaN
  7. e NaN
  8. f NaN
  9. g NaN
  10. dtype: float64

DataFrame

  1. In [47]: import numpy as np
  2.  
  3. In [48]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))
  4.  
  5. In [49]: b1
  6. Out[49]:
  7. a b c d
  8. 0 0.0 1.0 2.0 3.0
  9. 1 4.0 5.0 6.0 7.0
  10. 2 8.0 9.0 10.0 11.0
  11.  
  12. In [50]: b2 = DataFrame(np.arange(20.).reshape((4,5)),columns=list('abcde'))
  13.  
  14. In [51]: b2
  15. Out[51]:
  16. a b c d e
  17. 0 0.0 1.0 2.0 3.0 4.0
  18. 1 5.0 6.0 7.0 8.0 9.0
  19. 2 10.0 11.0 12.0 13.0 14.0
  20. 3 15.0 16.0 17.0 18.0 19.0
  21.  
  22. In [52]: b1+b2
  23. Out[52]:
  24. a b c d e
  25. 0 0.0 2.0 4.0 6.0 NaN
  26. 1 9.0 11.0 13.0 15.0 NaN
  27. 2 18.0 20.0 22.0 24.0 NaN
  28. 3 NaN NaN NaN NaN NaN

对NaN进行指定值填充

  1. In [53]: b1.sub(b2,fill_value=0)
  2. Out[53]:
  3. a b c d e
  4. 0 0.0 0.0 0.0 0.0 -4.0
  5. 1 -1.0 -1.0 -1.0 -1.0 -9.0
  6. 2 -2.0 -2.0 -2.0 -2.0 -14.0
  7. 3 -15.0 -16.0 -17.0 -18.0 -19.0

DataFrame与Series运算

  1. In [101]: b1
  2. Out[101]:
  3. a b c d

0 0.0 1.0 2.0 3.0

  1. 1 4.0 5.0 6.0 7.0
  2. 2 8.0 9.0 10.0 11.0
  3.  
  4. In [102]: b1.ix[0]
  5. Out[102]:

a 0.0 b 1.0 c 2.0 d 3.0

  1. Name: 0, dtype: float64
  2.  
  3. In [103]: b1-b1.ix[0]
  4. Out[103]:
  5. a b c d

0 0.0 0.0 0.0 0.0

  1. 1 4.0 4.0 4.0 4.0
  2. 2 8.0 8.0 8.0 8.0

第五 函数应用于映射

  1. In [111]: b1
  2. Out[111]:
  3. a b c d
  4. 0 0.0 1.0 2.0 3.0
  5. 1 4.0 5.0 6.0 7.0
  6. 2 8.0 9.0 10.0 11.0
  7.  
  8. In [112]: f = lambda x:x.max()-x.min()
  9.  
  10. In [113]: b1.apply(f)
  11. Out[113]:
  12. a 8.0
  13. b 8.0
  14. c 8.0
  15. d 8.0
  16. dtype: float64

找出DataFrame中每列的最大值和最小值

  1. In [1]: import numpy as np
  2.  
  3. In [2]: from pandas import DataFrame,Series
  4.  
  5. In [3]: import pandas as pd
  6.  
  7. In [4]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))
  8.  
  9. In [5]: b1
  10. Out[5]:
  11. a b c d
  12. 0 0.0 1.0 2.0 3.0
  13. 1 4.0 5.0 6.0 7.0
  14. 2 8.0 9.0 10.0 11.0
  15.  
  16. In [6]: def f(x):
  17. ...: return Series([x.min(),x.max()],index=['min','max'])
  18. ...:
  19.  
  20. In [7]: b1.apply(f)
  21. Out[7]:
  22. a b c d
  23. min 0.0 1.0 2.0 3.0
  24. max 8.0 9.0 10.0 11.0

第六 排序和排名

排序

Series

obj.sort_index()

  1. In [19]: obj = Series([4,np.nan,7,np.nan,-3,2])
  2.  
  3. In [20]: obj
  4. Out[20]:
  5. 0 4.0
  6. 1 NaN
  7. 2 7.0
  8. 3 NaN
  9. 4 -3.0
  10. 5 2.0
  11. dtype: float64
  12.  
  13. In [21]: obj.sort_index()
  14. Out[21]:
  15. 0 4.0
  16. 1 NaN
  17. 2 7.0
  18. 3 NaN
  19. 4 -3.0
  20. 5 2.0
  21. dtype: float64
  22.  
  23. In [22]: obj.sort_values()
  24. Out[22]:
  25. 4 -3.0
  26. 5 2.0
  27. 0 4.0
  28. 2 7.0
  29. 1 NaN
  30. 3 NaN
  31. dtype: float64

DataFrame

默认升序

data.sort_index()

data.sort_index(axis=1)

data.sort_index(axis=1,ascending=False)

排名

Series

排名会有一个排名值,从1开始。

rank()是平均排名,也就是会出现同排名值的情况。

但是可以通过如下method选项去破坏平级关系:

  1. In [38]: obj = Series([3,4,2,1,5,7,9,0])
  2.  
  3. In [39]: obj
  4. Out[39]:
  5. 0 3
  6. 1 4
  7. 2 2
  8. 3 1
  9. 4 5
  10. 5 7
  11. 6 9
  12. 7 0
  13. dtype: int64
  14.  
  15. In [40]: obj.rank()
  16. Out[40]:
  17. 0 4.0
  18. 1 5.0
  19. 2 3.0
  20. 3 2.0
  21. 4 6.0
  22. 5 7.0
  23. 6 8.0
  24. 7 1.0
  25. dtype: float64
  26.  
  27. In [41]: obj.rank(method='first')
  28. Out[41]:
  29. 0 4.0
  30. 1 5.0
  31. 2 3.0
  32. 3 2.0
  33. 4 6.0
  34. 5 7.0
  35. 6 8.0
  36. 7 1.0
  37. dtype: float64
  38.  
  39. In [42]: obj.rank(ascending=False,method='min')
  40. Out[42]:
  41. 0 5.0
  42. 1 4.0
  43. 2 6.0
  44. 3 7.0
  45. 4 3.0
  46. 5 2.0
  47. 6 1.0
  48. 7 8.0
  49. dtype: float64

DataFrame

  1. In [44]: data = DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1],'c':[-2,5,6,7]})
  2.  
  3. In [45]: data
  4. Out[45]:
  5. a b c
  6. 0 0 4 -2
  7. 1 1 7 5
  8. 2 0 -3 6
  9. 3 1 2 7
  10.  
  11. In [46]: data.rank(axis=1)
  12. Out[46]:
  13. a b c
  14. 0

2.0 3.0 1.0

  1. 1 1.0 3.0 2.0
  2. 2 2.0 1.0 3.0
  3. 3 1.0 2.0 3.0

axis表示行,axis=1表示第一行进行排名,0、4、-2,默认从小到大升序,应该是-2、0、4,所以0的排名值应该是2.0;4的排名值是3.0;-2的排名值是1.0

第七 带有重复值的轴索引

通过is_unique属性可以判断索引是否唯一。

利用Python进行数据分析_Pandas_基本功能的更多相关文章

  1. 利用Python进行数据分析_Pandas_数据加载、存储与文件格式

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 pandas读取文件的解析函数 read_csv 读取带分隔符的数据,默认 ...

  2. 利用Python进行数据分析_Pandas_层次化索引

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 层次化索引主要解决低纬度形式处理高纬度数据的问题 import pandas ...

  3. 利用Python进行数据分析_Pandas_处理缺失数据

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 读取excel数据 import pandas as pd import ...

  4. 利用Python进行数据分析_Pandas_汇总和计算描述统计

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. In [1]: import numpy as np In [2]: impo ...

  5. 利用Python进行数据分析_Pandas_数据结构

    申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 首先,需要导入pandas库的Series和DataFrame In [21] ...

  6. 利用Python进行数据分析_Pandas_数据清理、转换、合并、重塑

    1 合并数据集 pandas.merge pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, le ...

  7. 利用Python进行数据分析_Pandas_绘图和可视化_Matplotlib

    1 认识Figure和Subplot import matplotlib.pyplot as plt matplotlib的图像都位于Figure对象中 fg = plt.figure() 通过add ...

  8. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  9. 利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

随机推荐

  1. mysql的 UUID的生成方式

    之前一直用的  int 自增的方式,之后总觉得缺少自信.  之后,我觉得采用uuid的方式,可能会好一些,至于用户统计排序等,则另用属性进行记录.   这里设计到一对矛盾:  安全性 与  网络带宽利 ...

  2. 简记webpack运行报错 Uncaught TypeError: self.postMessage is not a function

    说好2017Fix的还是能重现,可能项目的版本比较旧了,简要记录解决办法 1.错误: index.js?bed3:67 Uncaught TypeError: self.postMessage is ...

  3. Leetcode题目437:路径总和III(递归-简单)

    题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...

  4. qt Qt5开发

    本章将介绍使用Qt5开发.我们将告诉你如何安装Qt SDK,如何使用Qt Creator IDE创建以及运行一个简单的Hello World应用程序. 一.安装Qt5 SDK Qt SDK包括构建桌面 ...

  5. JavaScript原型,原型链 ? 有什么特点?

    每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时, 如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会 ...

  6. 小程序checkbox调整大小

    .cb{ transform: scale(0.6,0.6); } <view> <label class="lab" for="box1"& ...

  7. 制作A4纸打印的网页像素大小设置(转)

    公司内做系统,要用A4纸打印东西,A4纸标准时mm,换算成像素不知道.网上找找,找到一篇文章,转一下,备用. A4纸的尺寸是210mm*297mm,也就是21.0cm*29.7cm,而1英寸=2.54 ...

  8. netty 聊天室

    https://blog.csdn.net/qq_37372007/article/details/82937584 使用netty实现一个多人聊天室--failed: Error during We ...

  9. markdown中如何设置字体为红色?

    答: 语法如下: <font color='red'> text </font>

  10. NewLife.XCode 上手指南

    想了解什么是XCode 在这里我不对XCode做过多介绍,XCode曾经是一个轻量级ORM组件,现在是一个重量级数据映射框架,支持实体对象数据到不同媒体的数据映射,提供面向对象的方式操作数据库,解决9 ...