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来管理数据。