Pandas 如何通过位置切片Pandas DataFrame
在本文中,我们将介绍如何使用Pandas中的位置切片来提取DataFrame中的子集。
阅读更多:Pandas 教程
切片单个行或列
首先,我们可以通过DataFrame的iloc方法使用位置切片提取单个行或列。iloc方法是纯粹基于位置的索引方式,语法如下:
df.iloc[<row-slice>, <column-slice>]
其中,row-slice和column-slice都可以是单个整数、整数列表或切片对象。例如,我们可以通过以下代码来提取第3行和第5行的第2列:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 32, 18, 47, 23],
'city': ['Sydney', 'Melbourne', 'Brisbane', 'Perth', 'Adelaide']}
df = pd.DataFrame(data)
subset = df.iloc[[2,4], 1]
print(subset)
输出为:
2 18
4 23
Name: age, dtype: int64
切片多个行或列
我们还可以使用iloc方法切片多个行或列。下面的代码演示如何提取前3行和第2列到最后一列:
subset = df.iloc[:3, 1:]
print(subset)
输出为:
age city
0 25 Sydney
1 32 Melbourne
2 18 Brisbane
基于标签和位置的混合切片
在Pandas中,还可以混合使用标签和位置来切片DataFrame,这需要使用loc方法。与iloc方法不同,loc方法基于标签索引,但也可以通过位置索引来切片。对于loc方法的语法如下:
df.loc[<row-selector>, <column-selector>]
其中,row-selector和column-selector分别是行和列的选择器,可以是标签、位置、布尔条件或它们的组合。如果row-selector或column-selector是位置切片,则它将被解释为闭合范围,即该范围的两侧都是包含的。
下面的代码演示如何使用loc方法基于标签和位置混合切片DataFrame:
# 生成一个新的DataFrame,索引为字母表每个字符
import string
data = {'name': list(string.ascii_lowercase),
'age': range(26)}
df = pd.DataFrame(data).set_index('name')
# 使用混合切片提取前10行和第2列到第5列
subset = df.loc['a':'j', 'age':'age']
print(subset)
输出为:
age
name
a 0
b 1
c 2
d 3
e 4
f 5
g 6
h 7
i 8
j 9
在这个例子中,我们首先生成一个新的DataFrame,其索引为字母表的每个字符。使用loc方法,我们提取了前10行和第2列到第5列。请注意,我们对字母a和j使用标签切片,对age列使用位置切片。
总结
在本文中,我们介绍了如何使用Pandas中的位置切片来提取DataFrame的子集。我们展示了如何使用iloc方法切片单个行或列,并展示了如何使用iloc方法切片多个行或列。我们还介绍了如何混合使用标签和位置来切片DataFrame,这需要使用loc方法。在实际的数据分析过程中,位置切片是非常有用的技能,有助于我们更加灵活地处理数据。
极客笔记