熊猫中的正则表达式用 ^ 过滤列

时间:2021-04-05 17:12:36

标签: python regex pandas dataframe

我正在使用 Pandas 并希望使用正则表达式过滤列。当我将正则表达式更改为 rf"{c}(\.)?(\d)*" 时,它会返回一些内容,但如果我希望它以某个字母开头,它会中断并且过滤后的数据框为空。

for c in self.variables.split():
             reg = rf"^{c}(\.)?(\d)*$"
             print(reg)
             filtered = self.raw_data.filter(regex=reg)

我做错了什么,我该如何解决。

PS:这是一个数据样本

variable      T    T.1    T.2    T.3    T.4  ...   T.8    T.9      l       phi     dl
0         29.63  27.87  26.95  26.64  26.25  ...  23.3  22.42  2.141  0.093551  0.002
1         29.70    NaN    NaN    NaN    NaN  ...   NaN    NaN  2.043  0.098052  0.002
2         29.62    NaN    NaN    NaN    NaN  ...   NaN    NaN  1.892  0.089973  0.002
3         29.65    NaN    NaN    NaN    NaN  ...   NaN    NaN  1.828  0.093132  0.002

我希望它返回 4 个 dfs,每个只包含特定变量的数据,例如

variable      T    T.1    T.2    T.3    T.4    T.5    T.6    T.7   T.8    T.9
0         29.63  27.87  26.95  26.64  26.25  25.62  24.99  23.85  23.3  22.42
1         29.70    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN    NaN
2         29.62    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN    NaN
3         29.65    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN    NaN
4         29.38    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN    NaN

或者只有 l 没有 dl(这就是为什么我认为我需要在我的正则表达式中使用 ^)

variable      l   
0         2.141  
1         2.043  
2         1.892  
3         1.828

提前感谢亲爱的社区

1 个答案:

答案 0 :(得分:0)

详情

  • variable 匹配文字字符串 variable
  • | 逻辑或,因为您希望每个其他数据框的列变量
  • ^ - 字符串的开始
  • {c} - 后跟带有所需变量的 f-string
  • (\.\d+)? - 文字 . 后跟一个或多个数字的可选序列
  • $ - 字符串结束。
import pandas as pd

df = pd.read_csv("sample.csv", sep='\s+')
print(df)

variables = ['T', 'l', 'phi', 'dl']

for c in variables:
    ds = df.filter(regex=rf"variable|^{c}(\.\d+)?$")
    print(f'\n---Variable: [{c}] ---')
    print(ds)
---Variable: [T] ---
   variable      T    T.1    T.2    T.3    T.4    T.5    T.6    T.7   T.8    T.9
0         0  29.63  27.87  26.95  26.64  26.25  25.62  24.99  23.85  23.3  22.42
1         1  29.70    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN    NaN
2         2  29.62    NaN    NaN    NaN    NaN    NaN    NaN    NaN   NaN    NaN
...

---Variable: [l] ---
   variable      l
0         0  2.141
1         1  2.043
2         2  1.892
...

---Variable: [phi] ---
   variable       phi
0         0  0.093551
1         1  0.098052
2         2  0.089973
...

---Variable: [dl] ---
   variable     dl
0         0  0.002
1         1  0.002
2         2  0.002
...