Python Pandas – 获取所请求的标签/级别的位置和分片索引,但不删除级别

Python Pandas – 获取所请求的标签/级别的位置和分片索引,但不删除级别

在Pandas中,我们可以使用.loc.iloc方法获取特定标签或级别的位置和分片索引。这些方法很常用,尤其是在处理大量的数据集时。在本篇文章中,我们将讨论如何使用Pandas获取所需要的标签或级别的位置和分片索引,同时不会删除任何级别。

.loc方法

.loc方法可以根据标签或者级别在DataFrame或者Series中选取数据。这里的标签或者级别可以是单个值、列表、切片、布尔型数组、甚至是可以转换为布尔型数组的函数。

选择单个标签

首先,我们要了解如何选择单个标签,如下面的示例所示:

import pandas as pd

data = {'Name': ['Tom', 'John', 'Sara', 'Alice', 'Bob'],
        'Age': [22, 25, 28, 31, 34],
        'Country': ['US', 'UK', 'Canada', 'Australia', 'India']}

df = pd.DataFrame(data)

print(df.loc[2])

输出结果为:

Name        Sara
Age           28
Country    Canada
Name: 2, dtype: object

选择多个标签

如果需要选择多个标签,我们可以将它们作为列表传递给.loc方法:

print(df.loc[[1,3,4]])

输出结果为:

    Name  Age    Country
1   John   25         UK
3  Alice   31  Australia
4    Bob   34      India

选择切片

我们还可以使用切片来选择标签,比如下面的示例选择第2行到第4行:

print(df.loc[2:4])

输出结果为:

    Name  Age    Country
2   Sara   28     Canada
3  Alice   31  Australia
4    Bob   34      India

选择布尔数组

使用布尔数组选择需要的标签也是常用的方法,例如:

filter = df["Age"] > 25
print(df.loc[filter])

输出结果为:

    Name  Age    Country
1   John   25         UK
2   Sara   28     Canada
3  Alice   31  Australia
4    Bob   34      India

获取级别编号

对于多重索引的数据结构,我们可以使用.loc方法获取指定级别的编号,如下面的示例所示:

import pandas as pd

index = pd.MultiIndex.from_product([['A','B','C'], ['Apple', 'Banana', 'Pear']])

data = pd.Series(range(9), index=index)

print(data.index.get_loc(('B', 'Banana')))

输出结果为:

4

.iloc方法

.iloc方法是使用整数选择数据。它与.loc类似,不同的是它使用整数而不是标签或者级别进行数据选择。

选择单个位置

首先,我们演示如何使用.iloc方法选取单个位置的数据:

import pandas as pd

data = {'Name': ['Tom', 'John', 'Sara', 'Alice', 'Bob'],
        'Age': [22, 25, 28, 31, 34],
        'Country': ['US', 'UK', 'Canada', 'Australia', 'India']}

df = pd.DataFrame(data)

print(df.iloc[2])

输出结果为:

Name        Sara
Age           28
Country    Canada
Name: 2, dtype: object

选择多个位置

如果需要选择多个位置,我们可以将它们作为列表传递给.iloc方法:

print(df.iloc[[1,3,4]])

输出结果为:

    Name  Age    Country
1   John   25         UK
3  Alice   31  Australia
4    Bob   34      India

选择切片

我们还可以用切片来选择位置,如下面的示例选择第2行到第4行:

print(df.iloc[2:4])

输出结果为:

    Name  Age    Country
2   Sara   28     Canada
3  Alice   31  Australia

选择布尔数组

使用布尔数组选择需要的位置也是一个通用的方法,例如:

filter = df["Age"] > 25
print(df.iloc[filter])

输出结果为:

    Name  Age    Country
2   Sara   28     Canada
3  Alice   31  Australia
4    Bob   34      India

获取所请求的标签/级别的位置和分片索引,但不删除级别

到目前为止,我们已经演示了如何使用.loc.iloc方法获取所请求的标签/级别的位置和分片索引。但有时候我们需要同时获取位置和标签/级别的值。我们可以使用IndexSlice对象解决这个问题。

使用IndexSlice对象

IndexSlice对象可以方便我们同时获取位置和标签/级别的值。以下是一个示例:

import pandas as pd

idx = pd.IndexSlice

data = pd.DataFrame({'year': [2010, 2010, 2011, 2011],
                     'quarter': [1, 2, 1, 2],
                     'sales': [10, 20, 30, 40]})

data.set_index(['year', 'quarter'], inplace=True)

print(data.loc[idx[:, 1], :])

输出结果为:

             sales
year quarter       
2010 1          10
2011 1          30

上面的代码使用了.loc方法和IndexSlice对象来获取所有第一季度的数据,包括行的位置和级别以及销售额的值。

结论

通过本篇文章,我们了解了如何使用Pandas的.loc.iloc方法来获取所请求的标签/级别的位置和分片索引,同时不会删除任何级别。我们还介绍了如何使用IndexSlice对象获取位置和标签/级别的值,这将在处理多重数据集时特别有用。希望这篇文章能够帮助你更好地使用Pandas来管理数据。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程