数据过滤是数据分析中的一项常见操作。Pandas 允许我们根据不同的条件过滤数据。
我们主要可以通过两种方式在 Pandas 中过滤数据
- 按列名(标签)
- 按实际数据(值)
按标签过滤数据
我们可以使用 `filter()` 函数按名称或标签选择列。让我们看一个例子。
import pandas as pd
# create a DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
'Salary': [50000, 60000, 55000, 70000]}
df = pd.DataFrame(data)
# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")
# use the filter() method to select columns based on a condition
filtered_df = df.filter(items=['Name', 'Salary'])
# display the filtered DataFrame
print("Filtered DataFrame:")
print(filtered_df)
输出
Original DataFrame: Name Department Salary 0 Alice HR 50000 1 Bob Marketing 60000 2 Charlie Marketing 55000 3 David IT 70000 Filtered DataFrame: Name Salary 0 Alice 50000 1 Bob 60000 2 Charlie 55000 3 David 70000
在此示例中,我们使用 `filter()` 通过列名选择了 `Name` 和 `Salary` 列。
要了解更多信息,请访问 Pandas filter()。
按值过滤数据
我们还可以按值过滤数据。按值过滤数据的几种常见方法是
- 使用逻辑运算符
- `isin()` 方法
- `str` 访问器
- `query()` 方法
逻辑运算符
您可以使用逻辑运算符根据列值过滤行。例如,
import pandas as pd
# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
'Salary': [50000, 60000, 55000, 70000]}
df = pd.DataFrame(data)
# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")
# use logical operators to filter
filtered_df = df[df.Salary > 55000]
# display the filtered DataFrame
print("Filtered DataFrame:")
print(filtered_df)
输出
Original DataFrame: Name Department Salary 0 Alice HR 50000 1 Bob Marketing 60000 2 Charlie Marketing 55000 3 David IT 70000 Filtered DataFrame: Name Department Salary 1 Bob Marketing 60000 3 David IT 70000
在上面的示例中,我们使用逻辑运算符 `>` 根据条件 `Salary > 55000` 选择了行。
`isin()` 方法
`isin()` 方法提供了使用列值过滤数据的另一种方法。让我们看一个例子。
import pandas as pd
# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
'Salary': [50000, 60000, 55000, 70000]}
df = pd.DataFrame(data)
# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")
# use isin() method
departments = ['HR', 'IT']
filtered_df = df[df.Department.isin(departments)]
# display the filtered DataFrame
print("Filtered DataFrame:")
print(filtered_df)
输出
Original DataFrame: Name Department Salary 0 Alice HR 50000 1 Bob Marketing 60000 2 Charlie Marketing 55000 3 David IT 70000 Filtered DataFrame: Name Department Salary 0 Alice HR 50000 3 David IT 70000
在此示例中,我们选择了 `Department` 值存在于 `departments` 列表中的那些行。
`str` 访问器
我们可以使用 `str` 访问器根据字符串值有效地过滤行。让我们看一个例子。
import pandas as pd
# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
'Salary': [50000, 60000, 55000, 70000]}
df = pd.DataFrame(data)
# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")
# use str accessor
filtered_df = df[df.Department.str.contains('Market')]
# display the filtered DataFrame
print("Filtered DataFrame:")
print(filtered_df)
输出
Original DataFrame: Name Department Salary 0 Alice HR 50000 1 Bob Marketing 60000 2 Charlie Marketing 55000 3 David IT 70000 Filtered DataFrame: Name Department Salary 1 Bob Marketing 60000 2 Charlie Marketing 55000
这里,我们根据字符串值过滤了行。我们只选择了 `Department` 值包含字符串 `Market` 的行。
`query()` 方法
这是根据列值过滤数据帧的最灵活的方法。
包含过滤条件的查询可以作为字符串传递给 `query()` 方法。
让我们看一个例子。
import pandas as pd
# create a sample DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Department': ['HR', 'Marketing', 'Marketing', 'IT'],
'Salary': [50000, 60000, 55000, 70000]}
df = pd.DataFrame(data)
# display the original DataFrame
print("Original DataFrame:")
print(df)
print("\n")
# use query method
filtered_df = df.query('Salary > 55000 and Department == "Marketing"')
# display the filtered DataFrame
print("Filtered DataFrame:")
print(filtered_df)
输出
Original DataFrame: Name Department Salary 0 Alice HR 50000 1 Bob Marketing 60000 2 Charlie Marketing 55000 3 David IT 70000 Filtered DataFrame: Name Department Salary 1 Bob Marketing 60000
在此示例中,我们使用 `query()` 方法选择了 `Salary > 55000` 和 `Department == "Marketing"` 的行。