Pandas iloc用法
参考:pandas iloc
pandas
是Python中用于数据处理和分析的强大工具,它提供了大量的功能,使得数据处理变得简单而高效。在pandas
中,DataFrame
是最常用的数据结构,它可以看作是一个二维的表格,其中每一列可以是不同的数据类型(数值、字符串、布尔值等),而iloc
则是DataFrame
中非常重要的一个功能,它可以让我们以整数位置(从0到length-1的范围内)来进行基于位置的索引。
本文将详细介绍pandas
的iloc
功能,包括其基本用法、常见操作以及一些注意事项,并通过大量的示例代码来帮助读者更好地理解和掌握iloc
。
1. iloc的基本用法
iloc
的基本用法非常简单,它的语法格式如下:
dataframe.iloc[row_indexer,column_indexer]
其中,row_indexer
和column_indexer
都是整数或整数列表,分别表示行和列的位置。
下面是一个简单的示例:
import pandas as pd
# 创建一个DataFrame
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
# 使用iloc获取第0行第0列的元素
print(df.iloc[0, 0])
Output:
2. iloc的常见操作
2.1 选择单个行或列
使用iloc
可以非常方便地选择单个行或列,只需要指定行或列的位置即可。例如,选择第0行:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[0])
Output:
选择第0列:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[:, 0])
Output:
2.2 选择多个行或列
iloc
也支持选择多个行或列,只需要将行或列的位置放在一个列表中即可。例如,选择第0行和第2行:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[[0, 2]])
Output:
选择第0列和第2列:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[:, [0, 2]])
Output:
2.3 选择行和列的子集
iloc
还可以选择行和列的子集,只需要指定行和列的位置范围即可。例如,选择第0行到第2行,第0列到第2列的子集:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[0:3, 0:3])
Output:
注意,这里的范围是左闭右开的,即包含左边的位置,但不包含右边的位置。
2.4 使用布尔索引
iloc
也支持使用布尔索引,只需要提供一个布尔列表,列表中的True
表示选择对应的行或列,False
表示不选择。例如,选择第0行和第2行:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[[True, False, True, False, False]])
Output:
选择第0列和第2列:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[:, [True, False, True, False]])
Output:
3. iloc的注意事项
虽然iloc
的用法非常灵活,但在使用时还是需要注意一些事项。
首先,iloc
的索引都是基于位置的,而不是基于标签的。这意味着,无论行或列的标签是什么,iloc
都只关心它们的位置。例如,即使行的标签是字符串,我们仍然需要使用整数位置来进行索引:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
# 尝试使用标签索引将会引发错误
# print(df.iloc['0']) # 错误示例,不应运行
# 正确的使用方式
print(df.iloc[0]) # 使用位置索引
Output:
其次,当使用切片索引时,iloc
的行为与Python列表或NumPy数组的切片类似,都是左闭右开区间。这意味着,指定的结束索引并不包含在内。例如:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
# 选择第1行到第3行,第1列到第3列的子集
print(df.iloc[1:4, 1:4])
Output:
最后,使用iloc
时需要确保索引不会越界。与Python的列表不同,DataFrame的iloc
在索引越界时会抛出一个IndexError
,而不是简单地返回一个空切片。例如:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
# 尝试访问不存在的行索引
# print(df.iloc[10]) # 错误示例,不应运行
4. iloc的高级用法
4.1 使用切片和单个索引的组合
iloc
可以灵活地结合切片和单个索引来选择数据。例如,选择第1行和第0列到第2列的数据:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[1, 0:3])
Output:
4.2 使用列表和切片的组合
iloc
还允许使用列表和切片的组合来进行更复杂的数据选择。例如,选择第0行和第2行,以及第1列到第3列的数据:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
print(df.iloc[[0, 2], 1:4])
Output:
4.3 使用布尔数组进行索引
iloc
也支持使用布尔数组进行索引,这在进行条件筛选时非常有用。例如,选择所有A
列值为pandasdataframe.com
的行:
import pandas as pd
df = pd.DataFrame({
'A': ['pandasdataframe.com', 'B', 'C', 'D', 'E'],
'B': ['pandasdataframe.com', 'G', 'H', 'I', 'J'],
'C': ['pandasdataframe.com', 'L', 'M', 'N', 'O'],
'D': ['pandasdataframe.com', 'P', 'Q', 'R', 'S']
})
# 创建一个布尔数组
condition = df['A'] == 'pandasdataframe.com'
print(df.iloc[condition.values])
Output:
通过这些示例,我们可以看到iloc
在数据选择和操作中的强大功能和灵活性。无论是基本的行列选择,还是更复杂的数据操作,iloc
都能提供有效的解决方案。在实际的数据处理和分析工作中,合理利用iloc
可以大大提高工作效率。