pandas中的索引和多层索引

索引分类

举例:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(4, 4))*10//1
print(df)

输出结果为:

     0    1    2    3
0  7.0  9.0  6.0  1.0
1  9.0  0.0  2.0  2.0
2  3.0  7.0  8.0  4.0
3  7.0  6.0  8.0  4.0

单层索引

  • 创建dataframe时,如果没有指定index和columns参数,pandas将会自动生成对应的索引;
  • 默认的行列标签皆为一个RangeIndex对象,属于Index中的一种形式;
    • 比如:
print(df.index)

输出结果为:

RangeIndex(start=0, stop=4, step=1)
  • Index是更通用的函数,通过Index函数可以创建Index对象,更改dataframe的索引;
Index_A = df.index = pd.Index(list('ABCD'))
df.columns = pd.Index(list('abcd'))

print(df)
print(Index_A)

输出结果为:

     a    b    c    d
A  8.0  8.0  6.0  5.0
B  1.0  4.0  4.0  4.0
C  3.0  9.0  8.0  6.0
D  3.0  1.0  0.0  0.0
Index(['A', 'B', 'C', 'D'], dtype='object')
  • index对象包含以下属性:
    • 值构成的数组:
Index_A.array

输出为:

<pandasarray>
['A', 'B', 'C', 'D']
Length: 4, dtype: object
</pandasarray>
+ 数据类型:
Index_A.dtype

输出为:

dtype('O')
+ level个数:
Index_A.nlevels

输出为:

1
+ 维度:
Index_A.ndim

输出为:

1
+ 尺寸:
Index_A.shape

输出为:

(4,)
+ 个数:
Index_A.size

输出为:

4
+ 值:
Index_A.values

输出为:

array(['A', 'B', 'C', 'D'], dtype=object)
索引操作
  • 获取索引index;
df.index
  • 访问当前数据的索引;
  • 指定索引
df.index = ['x', 'y']
  • 重新设置索引
df.reindex(list('abcde'))
  • 指定某一列作为索引
df.set_index('column_name', drop=False)
  • 返回索引的唯一值
df.set_index('column_name').index.unique()
特殊索引类型
  • NumericIndex,数值索引;
  • 浮点数索引:
pd.Float64Index([1, 2, 3, 4])

输出为:

[1.0, 2.0, 3.0, 4.0]
  • 整数;Int64Index
  • 无符号整数;UInt64Index
  • 等差序列;
pd.RangeIndex(start=1,stop=8,step=2)
  • CategoricalIndex,范围索引;
  • 约束可选值的范围,超过范围的值强制变为NaN;
df.index = pd.CategoricalIndex(list('ABCD'), categories=['A', 'B', 'C'])

则D的位置显示NaN
* IntervalIndex,区间索引;
– 索引的值为一个区间,通过interval_range函数创建;

df.index = pd.interval_range(start=0, end=4)

此时索引的形式:

(0, 1]
(1, 2]
&#x2026;&#x2026;
  • DatetimeIndex,时间索引;
  • PeriodIndex
  • 和DatetimeIndex类似,值为日期和时间的格式化结果
  • TimedeltaIndex;
  • 将时间间隔转换为时间戳;

多层索引(复合索引)

  • 当多个单层的索引结合在一起时,就形成了多层索引;
  • 适用于多种分类标准的场景,极大增强了数据处理的灵活性;
设置方式
  • 使用set_index()函数;
  • 举例:
df_1 = pd.DataFrame({"a":range(4), "b":range(4, 0, -1), "c":['one', 'two', 'one', 'two'], "d":list("asdf")})
df_2 = df_1.set_index(["c", "d"])
print(df_2)

输出结果为:

       a  b
c   d
one a  0  4
two s  1  3
one d  2  2
two f  3  1
  • 可以使用数组、元组、DataFrame创建;
  • 使用from_product函数创建;
多层索引操作
  • 替换索引层次;
df_1.swaplevel()
  • 取值时,从外层向内层逐层取值,有时需要交换次序才能取值;
  • 取出特定位置值:
df_1.loc["one"].loc["a"]
  • 区别于dataframe,在series中直接在方括号中写索引即可取值;

Original: https://blog.csdn.net/weixin_47844457/article/details/124655731
Author: 世澈
Title: pandas中的索引和多层索引

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/674590/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球