在Python中使用指定列名称过滤Pandas DataFrame

在Python中使用指定列名称过滤Pandas DataFrame

在本文中,我们将介绍如何使用Pandas库在Python中过滤指定列名称的DataFrame。Pandas是一个流行的数据分析库,是Python数据科学家必备的工具之一。

阅读更多:Pandas 教程

创建一个包含多个列名称的DataFrame

首先,我们需要创建一个包含多个列名称的DataFrame。我们可以使用Pandas的DataFrame()函数来创建一个DataFrame对象,并使用一个Python字典作为输入。字典的键将成为DataFrame的列名称,而字典的值将成为包含数据的列。我们来看一个示例代码:

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'], 
        'age': [25, 30, 35, 40, 45], 
        'gender': ['female', 'male', 'male', 'male', 'male'], 
        'salary': [50000, 60000, 70000, 80000, 90000]}

df = pd.DataFrame(data)
print(df)

上述代码将创建一个包含4列的DataFrame,其中包含5个行。

输出结果如下:

       name  age  gender  salary
0     Alice   25  female   50000
1       Bob   30    male   60000
2   Charlie   35    male   70000
3     David   40    male   80000
4    Edward   45    male   90000

根据列名称过滤DataFrame

现在,我们已经创建了一个DataFrame,我们可以使用filter()函数来根据列名称过滤出特定的列。filter()函数接受一个包含列名称的列表作为输入,并返回包含这些列的DataFrame。

我们可以通过以下代码来过滤namesalary列:

selected_columns = ['name', 'salary']
df_filtered = df.filter(items=selected_columns)
print(df_filtered)

这将输出一个仅包含namesalary列的DataFrame。

      name  salary
0    Alice   50000
1      Bob   60000
2  Charlie   70000
3    David   80000
4   Edward   90000

我们还可以通过like参数使用通配符来过滤列名称。例如,我们可以使用以下代码过滤所有名字以 a 结尾的列:

df_filtered = df.filter(like='a')
print(df_filtered)

输出结果如下:

       name  salary
0     Alice   50000
1       Bob   60000
2   Charlie   70000
3     David   80000
4    Edward   90000

使用正则表达式过滤列名称

除了使用通配符之外,我们还可以使用正则表达式来过滤列名称。Pandas的filter()函数有一个regex参数,我们可以将其设置为True来启用正则表达式过滤器。

以下代码将通过正则表达式过滤所有名字以小写字母 a 结尾的列:

df_filtered = df.filter(regex='[a-z]a$')
print(df_filtered)

输出结果如下:

       name
0     Alice
1       Bob
2   Charlie
3     David
4    Edward

我们还可以使用正则表达式来过滤所有名字以 a 结尾,但不区分大小写的列,示例如下:

import re

df_filtered = df.filter(regex=re.compile(r'[Aa]$', re.IGNORECASE))
print(df_filtered)

输出结果如下:

       name  salary
0     Alice   50000
1       Bob   60000
2   Charlie   70000
3     David   80000
4    Edward   90000

按列索引过滤DataFrame

如果您希望根据列的位置而不是名称来过滤DataFrame,可以使用iloc[]函数。以下代码将根据位置过滤第2、3列:

df_filtered = df.iloc[:, 1:3]
print(df_filtered)

它将输出一个包含第2到第3列的DataFrame,输出结果如下:

   age  gender
0   25  female
1   30    male
2   35    male
3   40    male
4   45    male

复杂的过滤器

我们还可以使用高级过滤器来过滤DataFrame。Pandas的query()函数允许我们使用类似SQL的查询语言来过滤DataFrame。

以下代码将根据salary列中的值大于70000的行来过滤DataFrame:

df_filtered = df.query('salary > 70000')
print(df_filtered)

输出结果如下:

      name  age gender  salary
3    David   40   male   80000
4   Edward   45   male   90000

我们还可以将多个条件组合在一起,例如以下代码将选择age3540之间,且gendermale的行:

df_filtered = df.query('gender=="male" & age>=35 & age<=40')
print(df_filtered)

输出结果如下:

    name  age gender  salary
2  Charlie   35   male   70000
3    David   40   male   80000

总结

本文介绍了如何使用Pandas在Python中过滤指定列名称的DataFrame。我们探讨了使用filter()函数和like参数、正则表达式过滤器以及高级过滤器query()函数的方法。通过使用这些技巧,您可以轻松地过滤大型数据集中的列并快速处理数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程