Pandas2.2 Index objects
Properties
Index.values | 返回 Index 对象的值,通常是一个 NumPy 数组 |
Index.is_monotonic_increasing | 用于检查索引的元素是否 单调递增 |
Index.is_monotonic_decreasing | 用于判断索引的值是否 单调递减 |
Index.is_unique | 用于检查索引中的标签是否 唯一 |
Index.has_duplicates | 用于检查索引是否包含重复值 |
Index.hasnans | 用于检查索引中是否包含缺失值(NaN) |
Index.dtype | 用于获取索引中元素的数据类型(dtype) |
Index.inferred_type | 用于推断索引中数据的类型 |
Index.shape | 用于返回索引的形状(即索引中元素的数量) |
Index.name | 用于获取或设置索引的名称 |
Index.names | 用于获取或设置**多级索引(MultiIndex)**中每一层级的名称 |
Index.nbytes | 用于返回索引对象所占用的内存大小(以字节为单位) |
Index.ndim | 用于返回索引的维度数量 |
Index.size | 用于返回索引中元素的总数量 |
Index.empty | 用于检查索引是否为空 |
Index.T | 它是 [transpose](转置)的简写 |
Index.memory_usage([deep]) | 用于返回索引对象所占用的内存大小(以字节为单位) |
pandas.Index.memory_usage()
pandas.Index.memory_usage([deep]) 是 pandas.Index 对象的一个方法,用于返回索引对象所占用的内存大小(以字节为单位)。这个方法可以帮助开发者了解索引在内存中的占用情况,对于性能分析和内存优化非常有用。
详细说明
- 用途:计算并返回索引对象所占用的内存大小
- 参数:
- deep(可选,布尔值,默认为 False):
- 当 deep=False 时,只计算索引对象本身的内存占用
- 当 deep=True 时,还会递归计算对象内部元素的内存占用(对于包含对象的索引特别有用)
- deep(可选,布尔值,默认为 False):
- 返回值:整数,表示索引对象所占用的字节数
- 适用场景:
- 内存使用分析
- 性能优化
- 大数据集处理时的资源管理
示例代码及结果
示例 1: 基本用法 – 数值索引
import pandas as pd
import numpy as np
# 创建不同类型的数值索引
int_index = pd.Index([1, 2, 3, 4, 5])
float_index = pd.Index([1.1, 2.2, 3.3, 4.4, 5.5])
print("整数索引内存占用(默认):", int_index.memory_usage())
print("整数索引内存占用(deep=True):", int_index.memory_usage(deep=True))
print("浮点索引内存占用(默认):", float_index.memory_usage())
print("浮点索引内存占用(deep=True):", float_index.memory_usage(deep=True))
输出结果:
整数索引内存占用(默认): 40
整数索引内存占用(deep=True): 40
浮点索引内存占用(默认): 40
浮点索引内存占用(deep=True): 40
示例 2: 字符串索引
import pandas as pd
# 创建字符串索引
string_index = pd.Index(['apple', 'banana', 'cherry', 'date'])
print("字符串索引内存占用(默认):", string_index.memory_usage())
print("字符串索引内存占用(deep=True):", string_index.memory_usage(deep=True))
# 创建包含较长字符串的索引
long_string_index = pd.Index(['this_is_a_very_long_string_example'] * 4)
print("长字符串索引内存占用(默认):", long_string_index.memory_usage())
print("长字符串索引内存占用(deep=True):", long_string_index.memory_usage(deep=True))
输出结果:
字符串索引内存占用(默认): 32
字符串索引内存占用(deep=True): 196
长字符串索引内存占用(默认): 32
长字符串索引内存占用(deep=True): 140
示例 3: 时间索引
import pandas as pd
# 创建时间索引
date_index = pd.date_range('2023-01-01', periods=100)
print("时间索引内存占用(默认):", date_index.memory_usage())
print("时间索引内存占用(deep=True):", date_index.memory_usage(deep=True))
输出结果:
时间索引内存占用(默认): 800
时间索引内存占用(deep=True): 800
示例 4: 分类索引
import pandas as pd
# 创建分类索引
categories = ['low', 'medium', 'high']
values = ['low', 'medium', 'high'] * 10
categorical_index = pd.CategoricalIndex(values, categories=categories)
print("分类索引内存占用(默认):", categorical_index.memory_usage())
print("分类索引内存占用(deep=True):", categorical_index.memory_usage(deep=True))
# 对比普通对象索引
object_index = pd.Index(values)
print("对象索引内存占用(默认):", object_index.memory_usage())
print("对象索引内存占用(deep=True):", object_index.memory_usage(deep=True))
输出结果:
分类索引内存占用(默认): 164
分类索引内存占用(deep=True): 164
对象索引内存占用(默认): 240
对象索引内存占用(deep=True): 804
示例 5: 多级索引
import pandas as pd
# 创建多级索引
arrays = [
['A', 'A', 'B', 'B', 'C', 'C'],
[1, 2, 1, 2, 1, 2]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=['letter', 'number'])
print("多级索引内存占用(默认):", multi_index.memory_usage())
print("多级索引内存占用(deep=True):", multi_index.memory_usage(deep=True))
输出结果:
多级索引内存占用(默认): 96
多级索引内存占用(deep=True): 240
示例 6: 包含 NaN 值的索引
import pandas as pd
import numpy as np
# 创建包含 NaN 的数值索引
nan_float_index = pd.Index([1.0, 2.0, np.nan, 4.0, 5.0])
print("包含 NaN 的浮点索引内存占用(默认):", nan_float_index.memory_usage())
print("包含 NaN 的浮点索引内存占用(deep=True):", nan_float_index.memory_usage(deep=True))
# 创建包含 NaN 的字符串索引
nan_string_index = pd.Index(['a', 'b', np.nan, 'd', 'e'])
print("包含 NaN 的字符串索引内存占用(默认):", nan_string_index.memory_usage())
print("包含 NaN 的字符串索引内存占用(deep=True):", nan_string_index.memory_usage(deep=True))
输出结果:
包含 NaN 的浮点索引内存占用(默认): 40
包含 NaN 的浮点索引内存占用(deep=True): 40
包含 NaN 的字符串索引内存占用(默认): 40
包含 NaN 的字符串索引内存占用(deep=True): 148
应用场景
注意事项
- 对于数值类型索引(如 int64、float64),deep 参数通常没有区别,因为这些类型的内存占用是固定的
- 对于对象类型索引(如字符串索引),deep=True 会计算实际字符串内容的内存占用,而 deep=False 只计算引用的内存占用
- 分类索引通常比对应的对象索引占用更少的内存,特别是在有重复值的情况下
- 在处理大型索引时,memory_usage(deep=True) 可能需要更多计算时间
与其他属性的对比
[nbytes] | 索引对象本身的字节大小 | 否 | 快速查看基本内存占用 |
memory_usage() | 索引对象的内存占用 | 否(默认) | 一般内存分析 |
memory_usage(deep=True) | 索引及其元素的总内存占用 | 是 | 精确内存分析 |
通过 memory_usage() 方法,开发者可以更好地理解和优化 pandas 索引的内存使用情况,这对于处理大型数据集尤为重要。
评论前必须登录!
注册