Python – 使用pandas搜索DataFrame中的特定值
在数据科学中,使用pandas库进行数据处理是非常常见的。pandas是一个基于NumPy的库,它提供了一个强大的数据结构:DataFrame。DataFrame是一个二维表格,其中数据以列和行的形式组织。而在处理数据时,往往需要搜索DataFrame中的特定值来处理数据。本文将介绍如何使用pandas搜索DataFrame中的特定值。
创建DataFrame
首先,我们需要创建一个DataFrame作为示例数据。为了简单起见,我们可以使用以下数据:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
'age': [25, 35, 45, 55, 65],
'city': ['New York', 'Paris', 'London', 'Tokyo', 'Singapore']}
df = pd.DataFrame(data)
print(df)
这将创建示例数据,并将其打印出来:
name age city
0 Alice 25 New York
1 Bob 35 Paris
2 Charlie 45 London
3 David 55 Tokyo
4 Emma 65 Singapore
现在我们已经有了一个DataFrame,我们可以使用pandas来搜索里面的特定值。
使用.loc方法搜索DataFrame中的特定值
pandas的DataFrame具有一个非常有用的方法.loc,它可以用于根据行标签和列标签(位置或值)对数据进行访问。下面我们将使用.loc方法来搜索DataFrame中的特定值。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
'age': [25, 35, 45, 55, 65],
'city': ['New York', 'Paris', 'London', 'Tokyo', 'Singapore']}
df = pd.DataFrame(data)
# 搜索 name = Bob 的行
print(df.loc[df['name'] == 'Bob'])
# 搜索 age > 45 或 name = Charlie 的行
print(df.loc[(df['age'] > 45) | (df['name'] == 'Charlie')])
此时,我们将会得到以下输出:
name age city
1 Bob 35 Paris
name age city
2 Charlie 45 London
3 David 55 Tokyo
4 Emma 65 Singapore
在上面的代码中,我们首先搜索了名为Bob的行,并使用.loc方法打印了结果。然后,我们搜索了年龄大于45岁或名为Charlie的行。
使用query方法搜索DataFrame中的特定值
另一个搜索DataFrame中特定值的方法是使用pandas的query方法。与.loc方法不同,query方法使用字符串作为条件。以下是相同的示例:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
'age': [25, 35, 45, 55, 65],
'city': ['New York', 'Paris', 'London', 'Tokyo', 'Singapore']}
df = pd.DataFrame(data)
# 搜索 name = Bob 的行
print(df.query('name == "Bob"'))
# 搜索 age > 45 或 name = Charlie 的行
print(df.query('age > 45 or name == "Charlie"'))
此时,我们得到的输出与上面的.loc方法的输出相同。
在DataFrame中搜索多个值
有时候,我们需要同时搜索多个值。在这种情况下,我们可以使用.isin方法。.isin方法允许我们指定一个值列表,并返回DataFrame中包含这些值的所有行。
例如,如果我们希望在名为David或Emma的行中搜索示例DataFrame,可以使用以下代码:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
'age': [25, 35, 45, 55, 65],
'city': ['New York', 'Paris', 'London', 'Tokyo', 'Singapore']}
df = pd.DataFrame(data)
# 在名为David或Emma的行中搜索
print(df.loc[df['name'].isin(['David', 'Emma'])])
这将返回以下结果:
name age city
3 David 55 Tokyo
4 Emma 65 Singapore
在上面的代码中,我们将需要搜索的值列表传递给了.isin方法,并使用.loc方法打印结果。
使用str.contains方法搜索字符串
在DataFrame中搜索包含特定字符串的值时,我们可以使用str.contains方法。例如,如果我们想在示例DataFrame中搜索包含“Y”字母的城市,可以使用以下代码:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
'age': [25, 35, 45, 55, 65],
'city': ['New York', 'Paris', 'London', 'Tokyo', 'Singapore']}
df = pd.DataFrame(data)
# 搜索包含 'Y' 字母的城市
print(df.loc[df['city'].str.contains('Y')])
这将返回以下结果:
name age city
0 Alice 25 New York
3 David 55 Tokyo
在上面的代码中,我们使用df[‘city’].str.contains(‘Y’)语句获取列表中每个城市是否包含“Y”。然后,我们使用.loc方法定位这些行,并打印了结果。
使用isin和str.contains方法组合搜索
最后,我们可以将.isin和.str.contains方法组合使用来搜索满足多个条件的行。以下是一个示例,我们希望搜索示例DataFrame中名为David或Emma且城市包含字母“o”的行:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma'],
'age': [25, 35, 45, 55, 65],
'city': ['New York', 'Paris', 'London', 'Tokyo', 'Singapore']}
df = pd.DataFrame(data)
# 搜索示例DataFrame中名为David或Emma且城市包含'o'字母的行
print(df.loc[df['name'].isin(['David', 'Emma']) & df['city'].str.contains('o')])
这将返回以下结果:
name age city
4 Emma 65 Singapore
在上面的代码中,我们将.isin方法与.str.contains方法组合使用,以搜索满足包含“o”字母的城市和名为David或Emma的行。我们使用.loc方法定位这些行,并打印了结果。
结论
在本文中,我们介绍了如何使用pandas搜索DataFrame中的特定值。我们介绍了以下方法:
- .loc方法:根据行标签和列标签(位置或值)访问数据。
- .query方法:使用字符串作为条件检索数据。
- .isin方法:搜索DataFrame中包含特定数值的行。
- .str.contains方法:搜索包含特定字符串的行。
通过使用这些方法,我们可以轻松地搜索DataFrame中的特定值,以便更好地处理数据。