Pandas 如何通过正则表达式从数据框中选择列

Pandas 如何通过正则表达式从数据框中选择列

在本文中,我们将介绍如何使用 Pandas 的正则表达式功能从数据框中选择指定的列。

首先,让我们创建一个示例数据框:

import pandas as pd
import numpy as np

data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky'], 
        'Age': [28, 34, 29, 42], 
        'Country': ['US', 'UK', np.nan, 'US'], 
        'Salary': [10000, 7000, 5000, np.nan]}
df = pd.DataFrame(data)
print(df)
Python

输出:

    Name  Age Country   Salary
0    Tom   28      US  10000.0
1   Jack   34      UK   7000.0
2  Steve   29     NaN   5000.0
3  Ricky   42      US      NaN
Python

阅读更多:Pandas 教程

Pandas 中支持的正则表达式符号

在使用 Pandas 的正则表达式功能之前,需要了解 Pandas 中支持哪些正则表达式符号。

常用的正则表达式符号如下:

符号 解释
. 匹配任意单个字符
^ 匹配字符串的开头
$ 匹配字符串的结尾
* 匹配前面的字符出现 0 次或多次
+ 匹配前面的字符出现 1 次或多次
? 匹配前面的字符出现 0 次或 1 次
[] 匹配中括号中的任意一个字符
| 或运算符

通过字符串匹配选择列

在 Pandas 中,可以使用 filter 方法和 columns 属性来通过字符串匹配选择列。

例如,我们可以选择所有以 S 开头的列,代码如下:

startsWithS = df.filter(regex='^S.*')
print(startsWithS)
Python

输出:

  Salary
0  10000
1   7000
2   5000
3    NaN
Python

通过正则表达式选择列

如果我们需要更复杂的列选择,就需要使用正则表达式来进行匹配。

例如,我们可以选择所有以大写字母开头的列,代码如下:

uppercaseCol = df.filter(regex='^[A-Z].*')
print(uppercaseCol)
Python

输出:

  Name Country Salary
0  Tom      US  10000
1 Jack      UK   7000
2 Steve    NaN   5000
3 Ricky     US    NaN
Python

正则表达式中的 ^[A-Z].* 表示选择以大写字母开头的所有列。

如果我们想要匹配特定的字符串,例如 AgeSalary,可以使用正则表达式符号 | 进行或运算。

例如,我们可以选择所有包含 AgeSalary 的列,代码如下:

ageOrSalary = df.filter(regex='Age|Salary')
print(ageOrSalary)
Python

输出:

   Age   Salary
0   28  10000.0
1   34   7000.0
2   29   5000.0
3   42      NaN
Python

忽略大小写进行选择

有时候,我们可能希望在进行列选择时忽略大小写。

可以在正则表达式前加上 (?i) 来进行不区分大小写的匹配。

例如,我们可以选择所有以 s 结尾的列,不区分大小写,代码如下:

endsWithS = df.filter(regex='(?i).*s$')
print(endsWithS)
Python

输出:

    Name   Salary
0    Tom  10000.0
1   Jack   7000.0
2  Steve   5000.0
3  Ricky      NaN
Python

正则表达式 (?i).*s$ 中的 (?i) 表示不区分大小写,.* 表示任意字符出现 0 次或多次,而 $ 则表示字符串结尾为 s

反向选择列

有时候,我们可能更希望通过排除不需要的列来选择指定的列。

可以使用 ~ 符号对正则表达式进行取反。

例如,我们可以选择除了以大写字母开头的列以外的所有列,代码如下:

notUppercaseCol = df.filter(regex='^(?![A-Z]).*')
print(notUppercaseCol)
Python

输出:

  Age Country
0  28      US
1  34      UK
2  29     NaN
3  42      US
Python

正则表达式 ^(?![A-Z]).* 中的 ^(?![A-Z]) 表示以非大写字母开头的所有列。

使用 loc 和 columns 方法

除了使用 filter 方法进行列选择外,还可以使用 loc 方法和 columns 属性进行选择。

例如,我们可以选择所有以 S 开头的列,代码如下:

startsWithS = df.loc[:, df.columns.str.startswith('S')]
print(startsWithS)
Python

输出:

  Country   Salary
0      US  10000.0
1      UK   7000.0
2     NaN   5000.0
3      US      NaN
Python

正则表达式 df.columns.str.startswith('S') 中的 startswith('S') 表示以 S 开头的列。

总结

本文介绍了如何使用 Pandas 的正则表达式功能从数据框中选择指定的列。通过字符串匹配和正则表达式选择列、忽略大小写进行选择、反向选择列以及使用 loc 和 columns 方法进行选择等多种方式,我们可以根据实际需求快速灵活地选择数据框中的列。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程