如何使用 Pandas 的 loc方法来根据多个条件筛选 DataFrame 中的数据
参考:pandas dataframe loc multiple conditions
在数据分析中,经常需要根据多个条件筛选数据。Pandas 是一个强大的数据处理库,它提供了多种方式来筛选数据。本文将详细介绍如何使用 Pandas 的 loc
方法来根据多个条件筛选 DataFrame 中的数据。
1. 基本使用方法
loc
是 Pandas DataFrame 的一个属性,它允许我们通过标签选择数据。loc
方法的基本语法是:
dataframe.loc[行标签, 列标签]
其中,行标签和列标签可以是单个标签、标签列表、标签范围或布尔数组。
2. 使用单个条件筛选数据
在使用 loc
方法筛选数据时,可以直接在行标签的位置传入一个条件表达式。例如,筛选出所有 A
列值大于 50 的行:
import pandas as pd
data = {'A': [10, 20, 30, 40, 50, 60, 70],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']}
df = pd.DataFrame(data)
result = df.loc[df['A'] > 50]
print(result)
Output:
3. 使用多个条件筛选数据
当需要根据多个条件筛选数据时,可以使用逻辑运算符将多个条件组合起来。常用的逻辑运算符有 &
(与)、|
(或)和 ~
(非)。下面是一些使用多个条件的示例:
示例1: 使用 &
运算符
筛选出所有 A
列值大于 50 且 B
列值为 ‘pandasdataframe.com’ 的行:
import pandas as pd
data = {'A': [10, 20, 30, 40, 50, 60, 70],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']}
df = pd.DataFrame(data)
result = df.loc[(df['A'] > 50) & (df['B'] == 'pandasdataframe.com')]
print(result)
Output:
示例2: 使用 |
运算符
筛选出所有 A
列值大于 50 或 B
列值为 ‘pandasdataframe.com’ 的行:
import pandas as pd
data = {'A': [10, 20, 30, 40, 50, 60, 70],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']}
df = pd.DataFrame(data)
result = df.loc[(df['A'] > 50) | (df['B'] == 'pandasdataframe.com')]
print(result)
Output:
示例3: 使用 ~
运算符
筛选出所有 A
列值不等于 50 的行:
import pandas as pd
data = {'A': [10, 20, 30, 40, 50, 60, 70],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']}
df = pd.DataFrame(data)
result = df.loc[~(df['A'] == 50)]
print(result)
Output:
4. 使用条件表达式的复杂情况
在实际应用中,我们可能会遇到需要根据多个复杂条件来筛选数据的情况。这时,可以通过定义多个条件表达式,然后将它们组合起来使用。下面是一些复杂条件筛选的示例:
示例4: 多条件复合筛选
筛选出所有 A
列值在 30 到 70 之间,且 B
列值为 ‘pandasdataframe.com’ 的行:
import pandas as pd
data = {'A': [10, 20, 30, 40, 50, 60, 70],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']}
df = pd.DataFrame(data)
result = df.loc[(df['A'] >= 30) & (df['A'] <= 70) & (df['B'] == 'pandasdataframe.com')]
print(result)
Output:
示例5: 使用 isin
方法
筛选出所有 A
列值在指定列表 [30, 60, 70] 中的行:
import pandas as pd
data = {'A': [10, 20, 30, 40, 50, 60, 70],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']}
df = pd.DataFrame(data)
result = df.loc[df['A'].isin([30, 60, 70])]
print(result)
Output:
示例6: 结合使用 isin
和其他条件
筛选出所有 A
列值在列表 [30, 60, 70] 中,且 B
列值为 ‘pandasdataframe.com’ 的行:
import pandas as pd
data = {'A': [10, 20, 30, 40, 50, 60, 70],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']}
df = pd.DataFrame(data)
result = df.loc[df['A'].isin([30, 60, 70]) & (df['B'] == 'pandasdataframe.com')]
print(result)
Output:
5. 总结
在本文中,我们详细介绍了如何使用 Pandas 的 loc
方法根据多个条件筛选 DataFrame 中的数据。我们通过多个示例展示了如何使用单个条件、多个条件以及复杂条件来筛选数据。