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)
输出:
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
阅读更多:Pandas 教程
Pandas 中支持的正则表达式符号
在使用 Pandas 的正则表达式功能之前,需要了解 Pandas 中支持哪些正则表达式符号。
常用的正则表达式符号如下:
符号 | 解释 |
---|---|
. |
匹配任意单个字符 |
^ |
匹配字符串的开头 |
$ |
匹配字符串的结尾 |
* |
匹配前面的字符出现 0 次或多次 |
+ |
匹配前面的字符出现 1 次或多次 |
? |
匹配前面的字符出现 0 次或 1 次 |
[] |
匹配中括号中的任意一个字符 |
| |
或运算符 |
通过字符串匹配选择列
在 Pandas 中,可以使用 filter
方法和 columns
属性来通过字符串匹配选择列。
例如,我们可以选择所有以 S
开头的列,代码如下:
startsWithS = df.filter(regex='^S.*')
print(startsWithS)
输出:
Salary
0 10000
1 7000
2 5000
3 NaN
通过正则表达式选择列
如果我们需要更复杂的列选择,就需要使用正则表达式来进行匹配。
例如,我们可以选择所有以大写字母开头的列,代码如下:
uppercaseCol = df.filter(regex='^[A-Z].*')
print(uppercaseCol)
输出:
Name Country Salary
0 Tom US 10000
1 Jack UK 7000
2 Steve NaN 5000
3 Ricky US NaN
正则表达式中的 ^[A-Z].*
表示选择以大写字母开头的所有列。
如果我们想要匹配特定的字符串,例如 Age
或 Salary
,可以使用正则表达式符号 |
进行或运算。
例如,我们可以选择所有包含 Age
或 Salary
的列,代码如下:
ageOrSalary = df.filter(regex='Age|Salary')
print(ageOrSalary)
输出:
Age Salary
0 28 10000.0
1 34 7000.0
2 29 5000.0
3 42 NaN
忽略大小写进行选择
有时候,我们可能希望在进行列选择时忽略大小写。
可以在正则表达式前加上 (?i)
来进行不区分大小写的匹配。
例如,我们可以选择所有以 s
结尾的列,不区分大小写,代码如下:
endsWithS = df.filter(regex='(?i).*s$')
print(endsWithS)
输出:
Name Salary
0 Tom 10000.0
1 Jack 7000.0
2 Steve 5000.0
3 Ricky NaN
正则表达式 (?i).*s$
中的 (?i)
表示不区分大小写,.*
表示任意字符出现 0 次或多次,而 $
则表示字符串结尾为 s
。
反向选择列
有时候,我们可能更希望通过排除不需要的列来选择指定的列。
可以使用 ~
符号对正则表达式进行取反。
例如,我们可以选择除了以大写字母开头的列以外的所有列,代码如下:
notUppercaseCol = df.filter(regex='^(?![A-Z]).*')
print(notUppercaseCol)
输出:
Age Country
0 28 US
1 34 UK
2 29 NaN
3 42 US
正则表达式 ^(?![A-Z]).*
中的 ^(?![A-Z])
表示以非大写字母开头的所有列。
使用 loc 和 columns 方法
除了使用 filter
方法进行列选择外,还可以使用 loc
方法和 columns
属性进行选择。
例如,我们可以选择所有以 S
开头的列,代码如下:
startsWithS = df.loc[:, df.columns.str.startswith('S')]
print(startsWithS)
输出:
Country Salary
0 US 10000.0
1 UK 7000.0
2 NaN 5000.0
3 US NaN
正则表达式 df.columns.str.startswith('S')
中的 startswith('S')
表示以 S
开头的列。
总结
本文介绍了如何使用 Pandas 的正则表达式功能从数据框中选择指定的列。通过字符串匹配和正则表达式选择列、忽略大小写进行选择、反向选择列以及使用 loc 和 columns 方法进行选择等多种方式,我们可以根据实际需求快速灵活地选择数据框中的列。