unique() 是 pandas 中常用的函数,它可以用于多种对象类型,包括 Series、Index、GroupBy 等。通过 unique(),可以获取不同数据类型的唯一值。接下来将详细列举并分析 unique() 在不同上下文中的使用。
1. pandas.Series.unique()
Series.unique() 用于返回一个 Series 中的唯一值。它会返回一个 numpy 数组,其中包含 Series 中所有不重复的元素。
示例:
import pandas as pd
# 创建 Series
s = pd.Series([1, 2, 2, 3, 4, 4, 5])
# 获取唯一值
unique_values = s.unique()
print(unique_values)
输出:
[1 2 3 4 5]
解释:
s.unique()返回了Series中所有唯一的值。注意,它会去除重复元素,并且返回一个numpy数组。
2. pandas.Index.unique()
Index.unique() 用法与 Series.unique() 类似,但是用于 Index 对象。它返回唯一的索引值。
示例:
# 创建 Index
index = pd.Index([1, 2, 2, 3, 4, 4, 5])
# 获取唯一值
unique_values = index.unique()
print(unique_values)
输出:
Int64Index([1, 2, 3, 4, 5], dtype='int64')
解释:
index.unique()返回了Index中的唯一元素,并且它的返回类型是Int64Index(或其它合适的Index类型)。
3. pandas.api.extensions.ExtensionArray.unique()
pandas.api.extensions.ExtensionArray 是 pandas 中用于扩展数据类型(如 Categorical 类型等)的一种抽象类。ExtensionArray 是 pandas 中的底层数组对象,支持 unique() 方法。与 Series 和 Index 类似,ExtensionArray.unique() 返回的是去重后的唯一值。
示例:
import pandas as pd
# 创建 Categorical Series
cat_s = pd.Series(["a", "b", "a", "c", "b"], dtype="category")
# 获取唯一值
unique_values = cat_s.cat.categories.unique()
print(unique_values)
输出:
Index(['a', 'b', 'c'], dtype='object')
解释:
cat_s.cat.categories.unique()获取的是Categorical数据类型的唯一值。
4. pandas.core.groupby.SeriesGroupBy.unique()
SeriesGroupBy.unique() 用于在 GroupBy 对象上调用 unique(),即它会对每个分组的 Series 进行去重,返回每个分组中的唯一值。
示例:
# 创建 DataFrame
df = pd.DataFrame({
'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Value': [1, 2, 2, 3, 1, 3]
})
# 按 'Category' 分组,并获取每组的唯一值
grouped = df.groupby('Category')['Value']
unique_values = grouped.unique()
print(unique_values)
输出:
Category
A [1, 2]
B [2, 3]
Name: Value, dtype: object
解释:
- 在
groupby对象上,unique()方法会返回每个组(Category)中的唯一值。
5. pandas.unique()
pandas.unique() 是一个全局函数,适用于 Series、Index 或数组。它返回唯一值,与 Series.unique() 或 Index.unique() 的效果类似。
示例:
# 使用 pandas.unique() 获取唯一值
unique_values = pd.unique([1, 2, 2, 3, 4, 4, 5])
print(unique_values)
输出:
[1 2 3 4 5]
解释:
pd.unique()可以直接用于列表、Series或Index,返回不重复的唯一值。它返回的结果是一个numpy数组。
6. pandas.Series.unique() 和 pandas.Index.unique() 的对比
pandas.Series.unique()返回的是一个numpy数组,而pandas.Index.unique()返回的是一个Index类型的数据结构(通常是Int64Index、Float64Index、DatetimeIndex或其它类型的Index)。Index是 pandas 中用于表示标签的结构,因此它的返回值会保持Index类型,而Series的返回值通常是numpy.ndarray类型。
7. pandas.Index.unique() 和 pandas.api.extensions.ExtensionArray.unique() 的对比
pandas.Index.unique()返回的是去重后的唯一索引值,而pandas.api.extensions.ExtensionArray.unique()是对 pandas 扩展数组(例如Categorical类型)应用的unique()方法。ExtensionArray.unique()可能返回不同类型的数组(例如Categorical或DatetimeIndex),具体取决于底层数据的类型。
8. 总结
pandas.Series.unique(): 用于获取Series中的唯一值,返回numpy.ndarray。pandas.Index.unique(): 用于获取Index中的唯一值,返回Index类型。pandas.api.extensions.ExtensionArray.unique(): 用于扩展类型的数组(如Categorical)获取唯一值。pandas.core.groupby.SeriesGroupBy.unique(): 用于在GroupBy对象上获取每个组的唯一值。pandas.unique(): 直接调用该函数也可以获取唯一值,适用于Series、Index或数组。
在实际使用中,选择哪一个方法取决于你正在处理的数据类型及其上下文。