索引分类
- Index;单层索引;
- MultiIndex;多层索引;
举例:
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]
……
- 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/
转载文章受原作者版权保护。转载请注明原作者出处!