《利用python进行数据分析》读书笔记之分层索引


分层索引可以让数据在一个轴上拥有多个索引,考虑以下例子:

import pandas as pd
import numpy as np
data = pd.Series(np.random.randn(9),
                 index = [list('aaabbccdd'),[1,2,3,1,3,1,2,2,3]])
# a  1    0.956148
#    2   -0.722317
#    3    0.349010
# b  1    0.226239
#    3   -0.529405
# c  1    1.047720
#    2    0.125013
# d  2    1.106569
#    3    1.529121
# dtype: float64

可以使用分层索引来方便的选出子集:


print(data['a'])
# 1    0.470976
# 2   -1.218771
# 3    0.244200
# dtype: float64
print(data['a':'c'])
# a  1    0.082245
#    2    0.776815
#    3    0.461049
# b  1   -1.141243
#    3    0.862922
# c  1   -0.703534
#    2   -1.186413
# dtype: float64
print(data.loc[['a','b']])
# a  1    1.199505
#    2   -0.224409
#    3    1.005648
# b  1   -0.178657
#    3   -0.524276
# dtype: float64
print(data.loc[:,2])
# a   -0.536039
# c   -1.384110
# d   -0.738628
# dtype: float64

可以使用unstack方法,将数据在DataFrame中重新排列:

df = data.unstack()
print(df)
#           1         2         3
# a -2.381009 -0.998445  0.156583
# b -0.394105       NaN  0.629349
# c  1.404356  0.970075       NaN
# d       NaN  0.355427  0.601178

其反向操作为stack方法:

df = data.unstack()
print(df.stack())
# a  1   -1.328935
#    2   -2.237134
#    3   -0.029331
# b  1   -0.774613
#    3   -0.437482
# c  1   -0.270287
#    2   -0.307728
# d  2    0.264248
#    3    1.083429
# dtype: float64

在DataFrame中两个轴都可以使用分层索引:

import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(12).reshape((4,3)),
                    index = [list('aabb'),[1,2,1,2]],
                    columns = [['O','O','C'],
                               ['G','R','G']])
print(data)
#      O       C
#      G   R   G
# a 1  0   1   2
#   2  3   4   5
# b 1  6   7   8
#   2  9  10  11

我们可以给分层的层级加上名称,如果层级有名称,这些名称会在控制台的输出显示:

data.index.names = ['key1','key2']
data.columns.names = ['state','color']
print(data)
# state      O       C
# color      G   R   G
# key1 key2
# a    1     0   1   2
#      2     3   4   5
# b    1     6   7   8
#      2     9  10  11

可以通过部分索引选出符合条件的组;

print(data['O'])
# color      G   R
# key1 key2       
# a    1     0   1
#      2     3   4
# b    1     6   7
#      2     9  10

重排序和层级排序

可以使用swaplevel方法改变层级序号顺序(默认为级数0排序,数据排序不变):

print(data.swaplevel('key1','key2'))
# state      O       C
# color      G   R   G
# key2 key1           
# 1    a     0   1   2
# 2    a     3   4   5
# 1    b     6   7   8
# 2    b     9  10  11

sort_index只能在单一层级上进行排序,在使用时需要进行指定层级:

print(data)
# state      O       C
# color      G   R   G
# key1 key2
# a    1     0   1   2
#      2     3   4   5
# b    1     6   7   8
#      2     9  10  11
print(data.sort_index(level = 1))
# state      O       C
# color      G   R   G
# key1 key2
# a    1     0   1   2
# b    1     6   7   8
# a    2     3   4   5
# b    2     9  10  11
print(data.swaplevel(0,1).sort_index(level = 0))
# state      O       C
# color      G   R   G
# key2 key1           
# 1    a     0   1   2
#      b     6   7   8
# 2    a     3   4   5
#      b     9  10  11

按层级进行汇总统计

我们可以按下面的方法按照层级在行和列上进行聚合:

print(data.sum(level = 'key2'))
# state   O       C
# color   G   R   G
# key2             
# 1       6   8  10
# 2      12  14  16
print(data.sum(level = 'color',axis = 1))
# color       G   R
# key1 key2        
# a    1      2   1
#      2      8   4
# b    1     14   7
#      2     20  10

使用DataFrame的列进行索引

我们有时候可能会想将DataFrame中的多个列作为行的索引,也可能会想让行索引移动到DataFrame的列中。考虑下面这个DataFrame:

import pandas as pd
data = pd.DataFrame({'a':range(7),'b':range(7,0,-1),
                     'c':['one','one','one','two','two','two','two'],
                     'd':[0,1,2,0,1,2,3]})
#    a  b    c  d
# 0  0  7  one  0
# 1  1  6  one  1
# 2  2  5  one  2
# 3  3  4  two  0
# 4  4  3  two  1
# 5  5  2  two  2
# 6  6  1  two  3

DataFrame的set_index方法可以生成一个新的DataFrame,新的DataFrame使用一个或者多个列作为索引,另外默认情况下作为索引的列会从DataFrame中移除,但是可以指定drop为False对其进行保留:

print(data.set_index(['c','d']))
#        a  b
# c   d      
# one 0  0  7
#     1  1  6
#     2  2  5
# two 0  3  4
#     1  4  3
#     2  5  2
#     3  6  1
print(data.set_index(['c','d'],drop=False))
#        a  b    c  d
# c   d              
# one 0  0  7  one  0
#     1  1  6  one  1
#     2  2  5  one  2
# two 0  3  4  two  0
#     1  4  3  two  1
#     2  5  2  two  2
#     3  6  1  two  3

另外,reset_index方法则可以将行索引移动到列中:

f = data.set_index(['c','d'],)
#        a  b
# c   d      
# one 0  0  7
#     1  1  6
#     2  2  5
# two 0  3  4
#     1  4  3
#     2  5  2
#     3  6  1
print(f.reset_index())
#      c  d  a  b
# 0  one  0  0  7
# 1  one  1  1  6
# 2  one  2  2  5
# 3  two  0  3  4
# 4  two  1  4  3
# 5  two  2  5  2
# 6  two  3  6  1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习数据分析是当代信息时代的一项重要技能,Python作为一种强大的编程语言,是数据分析的热门工具之一。以下是我在学习利用Python进行数据分析过程中的一些笔记。 首先,学习Python的基础知识是必不可少的。了解Python的基本语法、数据类型、循环和条件语句等知识对于数据分析的学习非常重要。我通过自学网课和阅读相关书籍,逐渐掌握了Python的基础知识。 其次,学习使用Python数据分析库。在Python中,有很多强大的数据分析库,例如NumPy、Pandas和Matplotlib等。我通过学习这些库的用法,掌握了数据的处理、清洗、分析和可视化的技巧。我学习了如何使用NumPy进行矩阵运算和数值计算,如何使用Pandas进行数据处理和数据操作,以及如何使用Matplotlib进行数据可视化。 除了数据分析库,学习Python的机器学习库也是必不可少的。机器学习在数据分析中扮演着重要角色,Python中有很多优秀的机器学习库,例如Scikit-learn和TensorFlow。我通过学习这些库的使用,了解了机器学习的基本概念和常用算法,例如回归、分类和聚类等。我也学习了如何使用这些库来构建和训练机器学习模型。 最后,实践是学习的关键。在学习的过程中,我通过实践项目来巩固所学知识。我选择了一些真实的数据集,并运用Python数据分析技术进行数据处理、分析和可视化。通过实践,我不仅掌握了数据分析的具体步骤和方法,还锻炼了自己解决实际问题的能力。 总的来说,学习利用Python进行数据分析需要掌握Python的基础知识、数据分析库和机器学习库的使用,同时也需要通过实践项目来巩固所学知识。这个过程需要持续不断的学习和实践,但是通过不断的努力和实践,我相信能够掌握Python进行数据分析的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值