【发布时间】:2021-07-01 13:03:33
【问题描述】:
我正在使用 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,每个 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
提前谢谢亲爱的社区
【问题讨论】:
-
如果你想过滤列,你不需要axis=1吗?
-
设置 axis=1 并没有改变任何东西。当我在没有 ^ 和 & 的情况下使用上述正则表达式
rf"{c}(\.)?(\d)*"时,它几乎可以工作,但我还想排除这个正则表达式没有发生的 dl 列。感谢您的帮助
标签: python regex pandas dataframe