python-数据分析-Pandas-5、DataFrame-index

Index类型,它为Series和DataFrame对象提供了索引服务,有了索引我们就可以排序数据(sort_index方法)、对齐数据(在运算和合并数据时非常重要)并实现对数据的快速检索(索引运算)。
由于DataFrame类型表示的是二维数据,所以它的行和列都有索引,分别是index和columns。Index类型的创建的比较简单,通常给出data、dtype和name三个参数即可,分别表示作为索引的数据、索引的数据类型和索引的名称。
由于Index本身也是一维的数据,索引它的方法和属性跟Series非常类似
# -*- coding: utf-8 -*-
#index

import pandas
import numpy

#范围索引
#范围索引是由具有单调性的整数构成的索引,我们可以通过RangeIndex构造器来创建范围索引,
# 也可以通过RangeIndex类的类方法from_range来创建范围索引
sales_data= numpy.random.randint(400, 1000, 12)
index = pandas.RangeIndex(1, 13, name='月份')
ser = pandas.Series(data=sales_data, index=index)
print(ser)
'''
月份
1     729
2     676
3     548
4     527
5     949
6     502
7     947
8     579
9     633
10    454
11    498
12    843
dtype: int32
'''

#分类索引
#分类索引是由定类尺度构成的索引。如果我们需要通过索引将数据分组,然后再进行聚合操作,分类索引就可以派上用场
#分类索引还有一个名为reorder_categories的方法,可以给索引指定一个顺序,分组聚合的结果会按照这个指定的顺序进行呈现
sales_data = [6, 6, 7, 6, 8, 6]
index = pandas.CategoricalIndex(    # 创建分类索引
    data=['苹果', '香蕉', '西瓜', '苹果', '西瓜', '香蕉'],  # 索引数据
    categories=['苹果', '香蕉', '西瓜'],  # 指定分类顺序
    ordered=True    # 指定索引为有序索引
)
ser = pandas.Series(data=sales_data, index=index)
print(ser)
'''
苹果    6
香蕉    6
西瓜    7
苹果    6
西瓜    8
香蕉    6
dtype: int64
'''

#基于索引分组数据,然后使用sum进行求和。
print(ser.groupby(level=0).sum())   # 按索引分组求和 level: 指定分组的索引级别
'''
苹果    12
香蕉    12
西瓜    15
dtype: int64
'''

#指定索引的顺序。
ser.index = index.reorder_categories(['西瓜', '香蕉', '苹果'])
print(ser.groupby(level=0).sum())
'''
西瓜    15
香蕉    12
苹果    12
dtype: int64
'''

print('-------------------------------------------')

#多级索引
#Pandas 中的MultiIndex类型用来表示层次或多级索引。
# 可以使用MultiIndex类的类方法from_arrays、from_product、from_tuples等来创建多级索引,我们给大家举几个例子。
tuples = [(1, 'red'), (1, 'blue'), (2, 'red'), (2, 'blue')]
index = pandas.MultiIndex.from_tuples(tuples, names=['number', 'color'])
print(index)
'''
MultiIndex([(1,  'red'),
            (1, 'blue'),
            (2,  'red'),
            (2, 'blue')],
           names=['number', 'color'])
'''

arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
index = pandas.MultiIndex.from_arrays(arrays, names=['number', 'color'])
print(index)
'''
MultiIndex([(1,  'red'),
            (1, 'blue'),
            (2,  'red'),
            (2, 'blue')],
           names=['number', 'color'])
'''

stu_ids = numpy.arange(1001, 1006)
semisters = ['期中', '期末']
index = pandas.MultiIndex.from_product((stu_ids, semisters), names=['学号', '学期'])
courses = ['语文', '数学', '英语']
scores = numpy.random.randint(60, 101, (10, 3))
df = pandas.DataFrame(data=scores, columns=courses, index=index)
print(df)

 

posted @ 2024-06-10 15:24  little小新  阅读(21)  评论(0编辑  收藏  举报