如何使用Pandas DataFrame的filter方法

如何使用Pandas DataFrame的filter方法

参考:pandas dataframe filter

在数据分析过程中,我们经常需要对数据进行过滤,以便只保留我们感兴趣的部分。Pandas库提供了一种强大的数据结构DataFrame,它允许我们以各种方式过滤数据。在本文中,我们将详细介绍如何使用Pandas DataFrame的filter方法。

1. filter的基本使用

Pandas DataFrame的filter方法可以用来过滤DataFrame的行或列。它的基本语法如下:

DataFrame.filter(items=None, like=None, regex=None, axis=None)

参数说明:

  • items:要过滤的列或行的名字列表。
  • like:一个字符串,用来过滤列或行的名字,只保留包含该字符串的列或行。
  • regex:一个正则表达式,用来过滤列或行的名字,只保留匹配该正则表达式的列或行。
  • axis:过滤的轴,0或’index’表示过滤行,1或’columns’表示过滤列。

下面我们通过一些示例来说明如何使用filter方法。

示例1:使用items参数过滤列

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.filter(items=['Name', 'Email'])
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们创建了一个包含三列的DataFrame,然后使用filter方法过滤出’Name’和’Email’两列。

示例2:使用like参数过滤列

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.filter(like='Ema')
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用like参数过滤出包含’Ema’的列,即’Email’列。

示例3:使用regex参数过滤列

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.filter(regex='^E')
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用regex参数过滤出以’E’开头的列,即’Email’列。

示例4:使用axis参数过滤行

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])

filtered_df = df.filter(items=['a', 'c'], axis=0)
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们创建了一个包含三列的DataFrame,并为每行指定了一个标签。然后我们使用filter方法和axis参数过滤出’a’和’c’两行。

2. filter与布尔索引

虽然filter方法可以方便地过滤列或行,但是它不能用来过滤数据值。如果我们需要根据数据值来过滤数据,我们可以使用布尔索引。

布尔索引是一种高级索引技术,它允许我们根据条件来选择数据。在Pandas中,我们可以使用比较运算符(如<、>、==等)来创建一个布尔DataFrame,然后使用这个布尔DataFrame来选择数据。

下面我们通过一些示例来说明如何使用布尔索引。

示例5:使用布尔索引过滤数据值

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df[df['Age'] > 19]
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们创建了一个布尔DataFrame,然后使用这个布尔DataFrame过滤出年龄大于19的行。

示例6:使用布尔索引过滤数据值

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df[df['Email'].str.contains('pandasdataframe.com')]
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用str.contains方法创建了一个布尔DataFrame,然后使用这个布尔DataFrame过滤出Email包含’pandasdataframe.com’的行。

3. filter与query方法

除了filter方法和布尔索引,Pandas还提供了一个query方法,它允许我们使用字符串表达式来过滤数据。query方法的基本语法如下:

DataFrame.query(expr, inplace=False)

参数说明:

  • expr:一个字符串表达式,用来过滤数据。
  • inplace:一个布尔值,如果为True,则在原地修改DataFrame,否则返回一个新的DataFrame。

下面我们通过一些示例来说明如何使用query方法。

示例7:使用query方法过滤数据值

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.query('Age > 19')
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用query方法过滤出年龄大于19的行。

示例8:使用query方法过滤数据值

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.query('Email.str.contains("pandasdataframe.com")', engine='python')
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用query方法和str.contains方法过滤出Email包含’pandasdataframe.com’的行。注意,这里我们需要指定engine参数为’python’,因为默认的engine不支持str.contains方法。

4. filter与loc、iloc方法

Pandas还提供了loc和iloc方法,它们允许我们通过标签或位置来过滤数据。loc方法使用标签来过滤数据,而iloc方法使用位置来过滤数据。

下面我们通过一些示例来说明如何使用loc和iloc方法。

示例9:使用loc方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])

filtered_df = df.loc[['a', 'c']]
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用loc方法过滤出’a’和’c’两行。

示例10:使用iloc方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.iloc[[0, 2]]
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用iloc方法过滤出第0行和第2行。

5. filter与where、mask方法

Pandas还提供了where和mask方法,它们允许我们根据条件来过滤数据。where方法保留满足条件的数据,而mask方法保留不满足条件的数据。

下面我们通过一些示例来说明如何使用where和mask方法。

示例11:使用where方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.where(df['Age'] > 19)
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用where方法过滤出年龄大于19的行。注意,不满足条件的行将被替换为NaN。

示例12:使用mask方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.mask(df['Age'] > 19)
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用mask方法过滤出年龄不大于19的行。注意,满足条件的行将被替换为NaN。

6. filter与isin方法

Pandas还提供了一个isin方法,它允许我们过滤出包含在给定列表中的数据。

下面我们通过一些示例来说明如何使用isin方法。

示例13:使用isin方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df[df['Name'].isin(['Tom', 'John'])]
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用isin方法过滤出名字为’Tom’或’John’的行。

7. filter与between方法

Pandas还提供了一个between方法,它允许我们过滤出在给定范围内的数据。

下面我们通过一些示例来说明如何使用between方法。

示例14:使用between方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df[df['Age'].between(19, 21)]
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用between方法过滤出年龄在19到21之间的行。

8. filter与duplicated方法

Pandas还提供了一个duplicated方法,它允许我们过滤出重复的数据。

下面我们通过一些示例来说明如何使用duplicated方法。

示例15:使用duplicated方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df[df.duplicated('Name', keep=False)]
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用duplicated方法过滤出名字重复的行。

9. filter与drop_duplicates方法

Pandas还提供了一个drop_duplicates方法,它允许我们删除重复的数据。

下面我们通过一些示例来说明如何使用drop_duplicates方法。

示例16:使用drop_duplicates方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.drop_duplicates('Name', keep='first')
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用drop_duplicates方法删除名字重复的行,只保留每个名字的第一行。

10. filter与eval方法

Pandas还提供了一个eval方法,它允许我们使用字符串表达式来过滤数据。eval方法的基本语法如下:

DataFrame.eval(expr, inplace=False)

参数说明:

  • expr:一个字符串表达式,用来过滤数据。
  • inplace:一个布尔值,如果为True,则在原地修改DataFrame,否则返回一个新的DataFrame。

下面我们通过一些示例来说明如何使用eval方法。

示例17:使用eval方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.eval('Age > 19')
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用eval方法过滤出年龄大于19的行。注意,eval方法返回的是一个布尔序列,我们可以使用这个布尔序列来过滤DataFrame。

11. filter与query方法

Pandas还提供了一个query方法,它允许我们使用字符串表达式来过滤数据。query方法的基本语法如下:

DataFrame.query(expr, inplace=False)

参数说明:

  • expr:一个字符串表达式,用来过滤数据。
  • inplace:一个布尔值,如果为True,则在原地修改DataFrame,否则返回一个新的DataFrame。

下面我们通过一些示例来说明如何使用query方法。

示例18:使用query方法过滤数据

import pandas as pd

data = {
    'Name': ['Tom', 'Nick', 'John', 'Tom'],
    'Age': [20, 21, 19, 18],
    'Email': ['tom@pandasdataframe.com', 'nick@pandasdataframe.com', 'john@pandasdataframe.com', 'tom@pandasdataframe.com']
}
df = pd.DataFrame(data)

filtered_df = df.query('Age > 19')
print(filtered_df)

Output:

如何使用Pandas DataFrame的filter方法

在这个示例中,我们使用query方法过滤出年龄大于19的行。

12. 总结

在本文中,我们介绍了Pandas中的多种数据过滤方法,包括filter、loc、iloc、where、mask、isin、between、duplicated、drop_duplicates、eval和query方法。这些方法可以帮助我们根据不同的需求来过滤数据,从而进行更有效的数据分析和处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程