在Python中选择pandas数据框架的行教程

245 阅读7分钟

Python - How to Select Rows from Pandas DataFrame

Pandas DataFrame属性如iloc和loc有助于从DataFrame中选择行。有多种方法来选择和索引DataFrame的行。我们也可以根据指定的条件从pandas DataFrame中选择行。逻辑选择和布尔系列也可以传递给pandas DataFrame的通用[]索引器,并给出同样的结果。

潘达斯选择行

要在Python中选择 pandas 数据框架,可以使用iloc 属性。Pandas Dataframe的iloc索引器用于基于整数位置的索引/按位置选择。

Pandas DataFrame是一个二维标记的数据结构,具有潜在的不同类型的列。你可以把它看作是一个电子表格、SQL ,或者是一个系列对象的dict。

它通常是最常用的pandas对象。和Series一样,DataFrame接受许多不同类型的输入。

  1. 一维ndarrays的dict,列表dict,或者Series
  2. 2-D numpy.ndarray
  3. 结构化或记录的ndarray
  4. 一个系列
  5. 另一个DataFrame

从潘达斯数据框架中选择行的步骤

步骤1:数据设置

Pandas read_csv()是一个内置的函数,用于从CSV文件中导入数据,并在Python中分析这些数据。所以,我们将从CSV文件中导入数据集,它将被自动转换为Pandas DataFrame,然后从DataFrame中选择数据。

我们项目的数据集在这里:

Data Setup

上述数据集有18行和5列。

第二步:导入CSV数据

将该文件放在我们的项目文件夹中,并与我们的python编程文件app.py放在同一目录下。然后, 在app.py 文件中写下 以下代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
print(df)

输出

python3 app.py
    Name Sex  Age  Height  Weight
0   Alex   M   41      74     170
1   Bert   M   42      68     166
2   Carl   M   32      70     155
3   Dave   M   39      72     167
4   Elly   F   30      66     124
5   Fran   F   33      66     115
6   Gwen   F   26      64     121
7   Hank   M   30      71     158
8   Ivan   M   53      72     175
9   Jake   M   32      69     143
10  Kate   F   47      69     139
11  Luke   M   34      72     163
12  Myra   F   23      62      98
13  Neil   M   36      75     160
14  Omar   M   38      70     145
15  Page   F   31      67     135
16  Quin   M   29      71     176
17  Ruth   F   28      65     131

所以,我们的DataFrame已经准备好了。read_csv()函数在导入完成后自动将CSV数据转换为DataFrame。然后,我们 可以使用**Python type()** 函数检查数据类型。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
print(type(df))

输出

python3 app.py
<class 'pandas.core.frame.DataFrame'>

步骤3:从Pandas DataFrame中选择行

使用iloc属性选择pandas行

Pandas.DataFrame.iloc是一个独特的内置方法,可以返回基于整数位置的索引,用于按位置选择。 iloc索引器的语法如下。

df.iloc[<row selection>, <column selection>]

这肯定会让R用户感到困惑。

pandas中的 "iloc " 是用来 按照行和列 在DataFrame中出现的顺序,按编号选择的。

如果我们传递df.iloc[6, 0],这意味着第6个索引行(行索引从0开始)和第0列,也就是名字。

所以,输出将根据我们的DataFrame是Gwen。所以,让我们以编程方式打印这个。

请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
print(df.iloc[6, 0])

输出

python3 app.py
Gwen

你可以想象,每一行都有一个从0到总行的行号(data.shape[0]),而iloc[]允许根据这些数字进行选择。这同样适用于所有的列(范围从0到data.shape[1])。

在上面的例子中,我们选择了一个特定的DataFrame值,但是我们也可以使用iloc选择DataFrame中的行。请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
print(df.iloc[4])

输出

python3 app.py
Name      Elly
Sex          F
Age         30
Height      66
Weight     124
Name: 4, dtype: object

所以,我们已经使用DataFrame的iloc[]属性选择了一个单行。

如果我们给iloc[]属性传递负值,它将给我们DataFrame的最后一行。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
print(df.iloc[-1])

输出

 python3 app.py
Name      Ruth
Sex          F
Age         28
Height      65
Weight     131
Name: 17, dtype: object

使用loc属性选择pandas行

Pandas DataFrame loc属性通过标签或布尔数组访问一组行和列。

DataFrame.loc[]主要是基于标签,但也可以使用布尔数组。

允许的输入有以下几种:

  1. 一个单一的标签,例如,5或'a',(注意,5被解释为索引的一个标签,而不是与索引一起的整数位置)。
  2. 一个标签的列表或数组,例如:['a', 'b', 'c']。
  3. 一个带有标签的切片对象,例如:'a':'f'。
  4. 一个与被切片的轴相同长度的布尔数组,例如,[True, False, True]。
  5. 一个有一个参数(调用系列或数据框架)的可调用函数,返回用于索引的有效输出(上述之一)。

现在,在我们的例子中,我们还没有设置一个索引。我们可以使用Pandas的set_index()函数来设置索引。我们正在设置Name 列作为我们的索引。

请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
df.set_index("Name", inplace=True)

现在,我们可以从DataFrame的Name列中选择任何标签,以获得该特定标签的行。

比方说,我们需要选择带有标签 "Gwen"的行**。**

请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
df.set_index("Name", inplace=True)
print(df.loc['Gwen'])

输出

python3 app.py
Sex         F
Age        26
Height     64
Weight    121
Name: Gwen, dtype: object

在Pandas中选择DataFrame的多条记录

Pandas的DataFrame loc[]属性被用来选择DataFrame的多行。

让我们坚持上面的例子,多加一个叫做Page 的标签**,** 并选择多行。

所以,我们是根据GwenPage 标签来选择行。

为了选择多行,我们必须将标签列表传递给loc[]属性。

请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
df.set_index("Name", inplace=True)
print(df.loc[['Gwen', 'Page']])

输出

python3 app.py
     Sex  Age  Height  Weight
Name
Gwen   F   26      64     121
Page   F   31      67     135

使用.loc的布尔型/逻辑型索引

使用**data.loc[]**的布尔数组进行条件选择是我在Pandas DataFrames中使用的标准方法。

使用布尔索引或逻辑选择,你将一个数组或真/假值系列传递给.loc索引器,以选择你的系列有真值的行。

请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
print(df.loc[df['Name'] == 'Bert'])

输出

python3 app.py
   Name Sex  Age  Height  Weight
1  Bert   M   42      68     166

在上面的例子中,语句df['Name'] == 'Bert'] 产生了一个Pandas系列,在'df'数据框架的每一行都有一个True/False值,其中名字为 "**Bert "**的行有 "True "

使用布尔值True/False系列来选择pandas数据框中的行--所有名字为 "**Bert "**的行都被选中。

Python Pandas:基于条件选择行

让我们选择所有年龄等于或大于40的行。

请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
print(df.loc[df['Age'] > 40])

输出

python3 app.py
    Name Sex  Age  Height  Weight
0   Alex   M   41      74     170
1   Bert   M   42      68     166
8   Ivan   M   53      72     175
10  Kate   F   47      69     139

选择身高小于65,体重大于160的行

请看下面的代码。

# app.py

import pandas as pd

df = pd.read_csv('people.csv')
op = df.loc[(df['Height'] > 70) & (df['Weight'] > 160)]
print(op)

输出结果

python3 app.py
    Name Sex  Age  Height  Weight
0   Alex   M   41      74     170
3   Dave   M   39      72     167
8   Ivan   M   53      72     175
11  Luke   M   34      72     163
16  Quin   M   29      71     176

总结

Pandas DataFrame提供了许多属性,如loc和iloc,对选择行很有用。在本教程中,我们已经看到了各种布尔条件来选择DataFrame的行、列和特定值。

本教程到此结束。