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

第一 重新索引

Series的reindex方法

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

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

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

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

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

In [23]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'],metho
...: d='pad') In [24]: obj1
Out[24]:
a 3
b 2
c 5
d 7
e 6
f 9
g 0
h 1
i 4
j 8
k 8
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的空行

In [64]: obj2 = obj.reindex(['a','b','c','d','e','f','g','k','h','i','j'],metho
...: d='backfill') In [65]: obj2
Out[65]:
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

DataFrame的reindex方法

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

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

In [86]: data = {'class':['语文','数学','英语'],'score':[120,130,140]}

In [87]: frame = DataFrame(data)

In [88]: frame
Out[88]:
class score
0 语文 120
1 数学 130
2 英语 140 In [89]: frame2 = frame.reindex([0,1,2,3]) In [90]: frame2
Out[90]:
class score
0 语文 120.0
1 数学 130.0
2 英语 140.0
3 NaN NaN

行、列 都修改

In [94]: frame3 = frame.reindex(index=[11,22,33],columns = ['a','b','c','d'])

In [95]: frame3
Out[95]:
a b c d
11 NaN NaN NaN NaN
22 NaN NaN NaN NaN
33 NaN NaN NaN NaN

reindex的参数如下:

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

Series

In [112]: obj = Series([1,2,3,4],index=['a','b','c','d'])

In [113]: obj
Out[113]:
a 1
b 2
c 3
d 4
dtype: int64 In [114]: obj1 = obj.drop('c') In [115]: obj1
Out[115]:
a 1
b 2
d 4
dtype: int64

DataFrame

删除单索引行

In [109]: frame
Out[109]:
class score
0 语文 120
1 数学 130
2 英语 140 In [110]: obj = frame.drop(0) In [111]: obj
Out[111]:
class score
1 数学 130
2 英语 140

删除多索引行

In [119]: frame
Out[119]:
class score
0 语文 120
1 数学 130
2 英语 140 In [120]: frame.drop([1,2])
Out[120]:
class score
0 语文 120

删除多索引行(带axis)

In [130]: frame
Out[130]:
class score
0 语文 120
1 数学 130
2 英语 140 In [131]: frame.drop([1,2],axis=0)
Out[131]:
class score
0 语文 120

删除列(columns)(带axis)

In [135]: frame
Out[135]:
class score
0 语文 120
1 数学 130
2 英语 140 In [136]: frame.drop(['class'],axis=1)
Out[136]:
score
0 120
1 130
2 140

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

第三 索引、选取与过滤

Series

In [1]: from pandas import Series,DataFrame

In [2]: obj = Series([1,2,3,4],index=['a','b','c','d'])

In [3]: obj
Out[3]:
a 1
b 2
c 3
d 4
dtype: int64 In [4]: obj[1]
Out[4]: 2 In [5]: obj['c']
Out[5]: 3 In [6]: obj[1:2]
Out[6]:
b 2
dtype: int64 In [7]: obj[2:4]
Out[7]:
c 3
d 4
dtype: int64

DataFrame

In [13]: from pandas import DataFrame,Series

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

索引方式一

In [16]: data['bb']
Out[16]:
a 2
b 5
c 8
Name: bb, dtype: int64

索引方式二

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

索引方式三

In [20]: data[data<4]
Out[20]:
aa bb cc
a 1.0 2.0 3.0
b NaN NaN NaN
c NaN NaN NaN In [21]: data[data<4]=0 In [22]: data
Out[22]:
aa bb cc
a 0 0 0
b 4 5 6
c 7 8 9

索引方式四

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

第四 算术运算与数据对齐

Series

In [36]: a1
Out[36]:
a 1
b 2
c 3
d 4
e 5
dtype: int64 In [37]: a2
Out[37]:
a 2
b 3
c 4
f 5
g 6
dtype: int64

a1+a2

In [38]: a1+a2
Out[38]:
a 3.0
b 5.0
c 7.0
d NaN
e NaN
f NaN
g NaN
dtype: float64

DataFrame

In [47]: import numpy as np

In [48]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))

In [49]: b1
Out[49]:
a b c d
0 0.0 1.0 2.0 3.0
1 4.0 5.0 6.0 7.0
2 8.0 9.0 10.0 11.0 In [50]: b2 = DataFrame(np.arange(20.).reshape((4,5)),columns=list('abcde')) In [51]: b2
Out[51]:
a b c d e
0 0.0 1.0 2.0 3.0 4.0
1 5.0 6.0 7.0 8.0 9.0
2 10.0 11.0 12.0 13.0 14.0
3 15.0 16.0 17.0 18.0 19.0 In [52]: b1+b2
Out[52]:
a b c d e
0 0.0 2.0 4.0 6.0 NaN
1 9.0 11.0 13.0 15.0 NaN
2 18.0 20.0 22.0 24.0 NaN
3 NaN NaN NaN NaN NaN

对NaN进行指定值填充

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

DataFrame与Series运算

In [101]: b1
Out[101]:
a b c d

0 0.0 1.0 2.0 3.0

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

a 0.0 b 1.0 c 2.0 d 3.0

Name: 0, dtype: float64

In [103]: b1-b1.ix[0]
Out[103]:
a b c d

0 0.0 0.0 0.0 0.0

1  4.0  4.0  4.0  4.0
2 8.0 8.0 8.0 8.0

第五 函数应用于映射

In [111]: b1
Out[111]:
a b c d
0 0.0 1.0 2.0 3.0
1 4.0 5.0 6.0 7.0
2 8.0 9.0 10.0 11.0 In [112]: f = lambda x:x.max()-x.min() In [113]: b1.apply(f)
Out[113]:
a 8.0
b 8.0
c 8.0
d 8.0
dtype: float64

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

In [1]: import numpy as np

In [2]: from pandas import DataFrame,Series

In [3]: import pandas as pd

In [4]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))

In [5]: b1
Out[5]:
a b c d
0 0.0 1.0 2.0 3.0
1 4.0 5.0 6.0 7.0
2 8.0 9.0 10.0 11.0 In [6]: def f(x):
...: return Series([x.min(),x.max()],index=['min','max'])
...: In [7]: b1.apply(f)
Out[7]:
a b c d
min 0.0 1.0 2.0 3.0
max 8.0 9.0 10.0 11.0

第六 排序和排名

排序

Series

obj.sort_index()

In [19]: obj = Series([4,np.nan,7,np.nan,-3,2])

In [20]: obj
Out[20]:
0 4.0
1 NaN
2 7.0
3 NaN
4 -3.0
5 2.0
dtype: float64 In [21]: obj.sort_index()
Out[21]:
0 4.0
1 NaN
2 7.0
3 NaN
4 -3.0
5 2.0
dtype: float64 In [22]: obj.sort_values()
Out[22]:
4 -3.0
5 2.0
0 4.0
2 7.0
1 NaN
3 NaN
dtype: float64

DataFrame

默认升序

data.sort_index()

data.sort_index(axis=1)

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

排名

Series

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

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

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

In [38]: obj = Series([3,4,2,1,5,7,9,0])

In [39]: obj
Out[39]:
0 3
1 4
2 2
3 1
4 5
5 7
6 9
7 0
dtype: int64 In [40]: obj.rank()
Out[40]:
0 4.0
1 5.0
2 3.0
3 2.0
4 6.0
5 7.0
6 8.0
7 1.0
dtype: float64 In [41]: obj.rank(method='first')
Out[41]:
0 4.0
1 5.0
2 3.0
3 2.0
4 6.0
5 7.0
6 8.0
7 1.0
dtype: float64 In [42]: obj.rank(ascending=False,method='min')
Out[42]:
0 5.0
1 4.0
2 6.0
3 7.0
4 3.0
5 2.0
6 1.0
7 8.0
dtype: float64

DataFrame

In [44]: data = DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1],'c':[-2,5,6,7]})

In [45]: data
Out[45]:
a b c
0 0 4 -2
1 1 7 5
2 0 -3 6
3 1 2 7 In [46]: data.rank(axis=1)
Out[46]:
a b c
0

2.0 3.0 1.0

1  1.0  3.0  2.0
2 2.0 1.0 3.0
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. 20191214数组之四:数字不相同的完全平方数(关于数位上数字判断与sprintf)

    sprintf用法参见之前的随笔;(以解决):

  2. (转)glances用法

    借鉴:https://www.ibm.com/developerworks/cn/linux/1304_caoyq_glances/index.html glances 可以为 Unix 和 Linu ...

  3. 如何利用awk累加第一列的值?

    以下是一个五行文件的例子: 1.[root@master yjt]# seq 5 |awk 'BEGIN{sum=0;print "总和:"}{if(NR<=4)printf ...

  4. 在取变量名的时候,千万不要用new

    这样子是会报错的

  5. idea 2019激活码

    9MWZD5CC4E-eyJsaWNlbnNlSWQiOiI5TVdaRDVDQzRFIiwibGljZW5zZWVOYW1lIjoiMjAxNzY1MDYxQGNxdS5lZHUuY24gLiIsI ...

  6. arcgis python 刷新

    arcpy.RefreshActiveView() 刷新地图和布局窗口 arcpy.RefreshTOC() 刷新内容列表 arcpy.RefreshCatalog(r"F:\tknew10 ...

  7. spring aop中aspect和advisor的区别

    之前看到spring AOP配置aspect(切面)有两种方式,一种是利用注解的方式配置,一种是利用XML的方式配置. 我们的配置是这样的<aop:aspect>,还有另外一种<ao ...

  8. 个微信小程序云开发云函数

    1. project.config.json写上云函数所在目录"cloudfunctionRoot": "cloudfunctions/",如图 2. app. ...

  9. DataSync 异构数据同步

    RAC, Data Gurad, Stream 是Oracle 高可用性体系中的三种工具,每个工具即可以独立应用,也可以相互配合. 他们各自的侧重点不同,适用场景也不同. RAC 它的强项在于解决单点 ...

  10. Arduino---ESP8266 WIFI模块

    一:Arduino安装ESP8266 https://www.arduino.cn/thread-76029-1-1.html(内容截图如下:最简单方法) 选用NodeMCU .0即可 二:简单测试 ...