Pandas iloc - 如何在DataFrames中使用索引选择行?

508 阅读5分钟

Pandas iloc是一种基于整数的索引方法,用于选择特定的行以及对pandas DataFrames和系列进行子集。使用这种方法的命令是 **pandas.DataFrame.iloc()**

iloc方法只接受整数值的参数。然而,这些参数可以用不同的方式传递。

在这篇文章中,你将了解使用iloc 方法对pandas数据帧和系列进行子集的不同方法。

读取数据集

# Load and read the dataset as a DataFrame

df = pd.read_csv('D:/PERSONAL/DATASETS/vgsales.csv')
df

Reading Pandas dataset

用Pandas iloc对数据帧进行子集

下面是一些使用iloc函数对数据帧进行子集的方法。

1.在潘达斯iloc中使用单一的整数值

你可以传递一个单一的整数值作为行的索引 数据框架所有列中选择一条行

例子1

# Subset a single row of the DataFrame
print(df.iloc[655])

Use pandas iloc to subset dataframe

通过给iloc函数指定行和列的索引,你也可以查看一个特定的数据点。

例2

# Display the value at row index 203 and column index 5
df.iloc[203, 5]

2.使用一个整数值的列表

使用整数值列表可以从DataFrame中选择特定的行和列,这些行和列可能是连续的也可能不是连续的。

传递给这个方法的第一个参数在行索引上执行子集,传递的第二个参数在列索引上执行子集。这两个参数分别是行索引和列索引的列表。

例子1

# subset only rows
df.iloc[[2, 657, 658, 3445]]

Example 1: Use list of integer values to subset

例子2

# subset both rows and columns
df.iloc[[2, 657, 658, 3445], [2, 3, 4]]

Example 2: Use list of integer values to subset

3.切片

在切片对象的帮助下,你可以将一些连续的行和列从DataFrame中分出来

用于对行指数和列指数进行子集的参数是作为单独的切片对象传递给iloc 方法的。

例子1

# subset the first hundred rows
df.iloc[:100]

Use Pandas iloc for slicing data

例子2

# Subset the rows indexed from 144 to 256 and the second, third and fourth column of the DataFrame

df.iloc[144:257, 2:5]

Example 2 - For slicing

4.使用布尔值

你也可以使用布尔值来对一个DataFrame进行子集。你可以把它们作为一个值的列表或作为一个切片对象来传递,以便对行和列进行子集。

  1. 对于显示一个特定的行或列,传递布尔值True
  2. 对于不显示所有其他行和列,传递布尔值。False

例子

# Pass a Boolean value(True for the index to be displayed and False for all the indices not to be displayed).

df.iloc[:, [True, False, False, False, False,
            True, False, False, False, False, False]]

Use Boolean values for subsetting data

在行索引参数中传递的冒号(:)表明DataFrame的所有行都要被显示。

因此,这一行df.iloc[:,[True,False,False,False,False,True,False,False,False,False,False]] 告诉 Python 显示所有的行,但只显示 DataFrame的第一和第六列


用Pandas iloc对pandas系列进行子集

iloc 方法也可以用来对 pandas 系列进行子集。所有可以应用于pandas数据框架的方法也适用于pandas系列。

如果pandas系列作为一个列出现在一个数据框架中:

  1. 首先,该列被子集化,然后
  2. 然后可以使用iloc方法对该列的值进行子集。

由于pandas系列是一个一维的数据结构,它只能沿着行被子集。因此,它只接受行索引参数。

创建一个pandas系列

data = pd.Series(['Bitcoin', 'Ethereum', 'Litecoin', 'Cardano', 'Polkadot'])

要了解更多关于创建pandas系列的信息,请点击*这里**。*

1.使用一个单一的整数值

在这里,你可以传递一个单一的整数值来查看 系列的一个特定值

例子

# Pass a single integer value
data.iloc[3]

Single integer value

2.使用一个整数值的列表

向系列传递一个数值列表,可以查看系列的一些数值,这些数值可能是连续的,也可能不是连续的。

例子

# Pass a list of integer values
data.iloc[[1, 2, 4]]

Use list of integer values

3.切片

通过使用切分,你可以一次查看一系列的连续值

例子

# Pass a slice object
data.iloc[:3]

Use slicing with Pandas iloc function

4.使用布尔值

你也可以使用布尔值来显示一个系列的值。

其语法类似于用于对数据框架进行子集的语法。你可以传递一个列表或一个布尔值的片断对象来对系列进行子集:

  1. 如果要显示一个特定的索引,可以传递布尔值True
  2. 对于不显示所有其他指数,传递布尔值 False

例子

data.iloc[[True, False, True, True, False]]

Use Boolean values to display series values


Pandas iloc的实用技巧

  1. 请记住,当你使用整数值列表切片对象对数据框架进行子集时,如果不指定行索引,就不能传递列索引。然而,如果只传递行指数而不传递列指数,则允许只对行指数进行子集。
  2. 尽量避免通过使用布尔值对数据帧或系列进行子集,因为为数据帧或系列的每一行索引传递一个TrueFalse 布尔值可能不可行。
  3. 使用值-1作为子集的最后一行或最后一列的索引值。
# Display all the values of the last column down
#the rows
df.iloc[:, -1]

Use of value -1 in in the index in Pandas iloc function

# Display all the values of the last row
# across all the columns
df.iloc[-1, :]

Display all values in last row, across all columns


总结

在这篇文章中,你已经学会了如何使用pandas DataFrames和系列进行子集。

  1. 单个整数值

  2. 整数值的列表

  3. 分割对象

  4. 布尔值


测试你对Pandas iloc的认识

Q1: 在对数据帧进行子集的布尔方法中,你只需要将索引相应位置的True ,作为一个列表传递。真的还是假的?

答案 错。你需要在要显示的索引位置传递True值,同时在所有其他不应显示的索引位置传递False值。

Q2: 你有一个存储在变量df中的DataFrame。请编写代码,使用切片法对DataFrame的所有行和前四列进行子集。

答案

df.iloc[:,:4]

Q3: 编写代码,使用iloc方法查看存储在变量df中的DataFrame 的第二、第四和第五行以及第七和第九列。

答案

df.iloc[[1,3,4],[6,8]]

Q4: 编写代码以查看存储在变量df中的DataFrame的行索引234和列索引3的数据点。

答案

df.iloc[234,3]