在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。
我们可以通过以下代码来过滤name
和salary
列:
selected_columns = ['name', 'salary']
df_filtered = df.filter(items=selected_columns)
print(df_filtered)
这将输出一个仅包含name
和salary
列的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
我们还可以将多个条件组合在一起,例如以下代码将选择age
在35
和40
之间,且gender
为male
的行:
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()
函数的方法。通过使用这些技巧,您可以轻松地过滤大型数据集中的列并快速处理数据。