在 Pandas 中获取列与特定值匹配的行的索引
本文演示了 Pandas 中如何获取符合特定条件的行的索引。
在特征工程中,查找行的索引的必要性是很重要的。这些技能对于去除 Dataframe 中的离群值或异常值很有用。索引,也就是行标签,可以在 Pandas 中使用几个函数找到。在下面的例子中,我们将处理使用以下代码段创建的 DataFrame。
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df)
输出:
A B C D
0 13 16 1 4
1 4 8 10 19
2 5 7 13 2
3 7 8 15 18
4 6 14 9 10
5 17 6 16 16
6 1 19 4 18
7 15 8 1 2
8 10 1 11 4
9 12 19 3 1
10 1 5 6 7
11 9 18 16 5
12 10 11 2 2
13 8 10 4 7
14 12 15 19 1
15 15 4 13 11
16 12 5 7 5
17 16 4 13 5
18 9 15 16 4
19 16 14 17 18
在 Pandas 中获取包含整数/浮点数的行的索引
pandas.DataFrame.loc
函数可以通过其标签/名称访问行和列。它直接返回与作为标签传递的给定布尔条件相匹配的行。请注意片段中 df.loc
旁边的方括号。
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.loc[df["B"] == 19])
对应于布尔条件的行将以 Dataframe 格式的输出返回。
输出:
A B C D
6 1 19 4 18
9 12 19 3 1
多个条件可以被串联起来并一起应用到函数中,如下所示。这有助于根据特定条件隔离行。
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.loc[(df["B"] == 19) | (df["C"] == 19)])
输出:
A B C D
6 1 19 4 18
9 12 19 3 1
14 12 15 19 1
用 pandas.DataFrame.index()
获取行的索引
如果你想只查找满足作为参数传递的布尔条件的 DataFrame 的匹配索引,pandas.DataFrame.index()
是最简单的实现方式。
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.index[df["B"] == 19].tolist())
在上面的代码段中,列 A
中与布尔条件 == 1
相匹配的行以输出的方式返回,如下所示。
输出:
[6, 9]
我们之所以把 tolist()
放在 index()
方法后面,是为了把 Index
转换为列表,否则,结果就是 Int64Index
数据类型。
Int64Index([6, 9], dtype='int64'
也可以根据多个条件只检索索引。这段代码可以写成如下。
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))
print(df.index[(df["B"] == 19) | (df["C"] == 19)].tolist())
输出:
[6, 9, 14]
在 Pandas 中获取包含字符串的行的索引
字符串值可以根据两种方法进行匹配。上一节中所示的两种方法都可以使用,除了条件变化。
在下面的例子中,我们将使用以下片段。
import pandas as pd
df = pd.DataFrame(
{
"Name": ["blue", "delta", "echo", "charlie", "alpha"],
"Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
}
)
print(df)
输出:
Name Type
0 blue Raptors
1 delta Raptors
2 echo Raptors
3 charlie Raptors
4 alpha Tyrannosaurus rex
用精确字符串匹配获取行的索引
上一节中使用的相等条件可以用来寻找 Dataframe 中的精确字符串匹配。我们来寻找两个字符串。
import pandas as pd
df = pd.DataFrame(
{
"Name": ["blue", "delta", "echo", "charlie", "alpha"],
"Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
}
)
print(df.index[(df["Name"] == "blue")].tolist())
print("\n")
print(df.loc[df["Name"] == "blue"])
print("\n")
print(df.loc[(df["Name"] == "charlie") & (df["Type"] == "Raptors")])
输出:
[0]
Name Type
0 blue Raptors
Name Type
3 charlie Raptors
如上所示,索引和符合条件的行都可以被接收。
获取具有部分字符串匹配条件的行的索引
通过将 DataFrame 与 str.contains
函数进行链式连接,可以部分匹配字符串值。在下面的例子中,我们将在 charlie 和 alpha中寻找字符串 ha
。
import pandas as pd
df = pd.DataFrame(
{
"Name": ["blue", "delta", "echo", "charlie", "alpha"],
"Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
}
)
print(df.index[df["Name"].str.contains("ha")].tolist())
print("\n")
print(df.loc[df["Name"].str.contains("ha")])
print("\n")
print(df.loc[(df["Name"].str.contains("ha")) & (df["Type"].str.contains("Rex"))])
输出:
[3, 4]
Name Type
3 charlie Raptors
4 alpha Tyrannosaurus rex
Name Type
4 alpha Tyrannosaurus rex
这个函数在对 DataFrame 的多列进行部分字符串匹配时非常有用。
相关文章
DataFrame 获取给定列的第一行
发布时间:2024/04/22 浏览次数:51 分类:Python
-
本教程介绍了如何在 Pandas DataFrame 中使用 Series.loc()和 Series.iloc()方法获取给定列的第一行。
如何基于 Pandas 中的给定条件创建 DataFrame 列
发布时间:2024/04/22 浏览次数:147 分类:Python
-
我们可以使用列表推导技术,numpy 方法,apply()方法和 map()方法对 Pandas 中的给定条件创建 DataFrame 列。
在 Pandas 的 DataFrame 中合并两列文本
发布时间:2024/04/22 浏览次数:99 分类:Python
-
在 Pandas 库中使用 + 运算符,apply(),map(),str.cat(),agg()方法在 DataFrame 中合并列
Pandas DataFrame DataFrame.append() 函数
发布时间:2024/04/22 浏览次数:92 分类:Python
-
Pandas 中的 append 方法将两个不同 DataFrame 的行合并,并返回新的 DataFrame。
Pandas DataFrame DataFrame.apply() 函数
发布时间:2024/04/22 浏览次数:172 分类:Python
-
Pandas DataFrame apply()函数将输入的函数应用到 Pandas DataFrame 的每一个沿行或沿列的元素。
Pandas DataFrame DataFrame.aggregate() 函数
发布时间:2024/04/22 浏览次数:98 分类:Python
-
Pandas DataFrame aggregate()函数对 DataFrame 的列或行进行聚合。