如何重命名其中包含某些单词的列

How to rename column with certain words in it

这里是 python 中的菜鸟。如果我问的是愚蠢的问题(我希望我不是),请原谅我。

我有一个如下所示的数据框 1:

Running rate ($/hour)        Eating rate (lb/hour)     Age
50                          20                         50 
30                          10                         40

和另一个数据框 2,如下所示:

Running rate (km/hour)     Eating rate (kg/hour)      Age
5                          23                         50 
3                          18                         40

现在我想:

  1. 遍历所有数据帧(我已经做到了)
    1. 将所有的“(XX/hour)”替换为'per hour'。

所以基本上,无论是 "lb/hour" 还是 "km/hour" 还是 "kg/hour",我都希望将它们更改为 "per hour",所以这两个数据帧应该看起来像以下:

数据帧 1 所需的输出:

Running rate per hour       Eating rate per hour       Age
50                          20                         50 
30                          10                         40

数据帧 2 所需输出:

Running rate per hour      Eating rate per hour       Age
5                          23                         50 
3                          18                         40

我查看了很多帖子并尝试使用

> df.rename(columns={'a':'b'})

,但此方法仅将名为 'a' 的列更改为名称 'b',我不知道如何将 Regex 版本合并到其中。

感谢任何帮助!

这应该有效:

df.columns = [re.sub('\(.+/(.+)\)', r'per ', c) for c in df.columns]

这里df是一个DataFrame, and re is the regular expression module.


更新: 对使用的 regular expression 的澄清。

我实际上做了一个比这里需要的更通用的表格。 OP 最简单的正则表达式实际上是

[re.sub('\(.+/hour\)', 'per hour', c) for c in ['A (a/hour)', 'B (b/hour)', 'Age']]

我使用的正则表达式允许有一个总分母。例如,更简单的 regex

[re.sub('\(.+/hour\)', 'per hour', c) for c in ['A (a/hour)', 'B (b/day)', 'Age']]

给予

['A per hour', 'B (b/day)', 'Age']

但更通用的正则表达式

[re.sub('\(.+/(.+)\)', r'per ', c) for c in ['A (a/hour)', 'B (b/day)', 'Age']]

给予

['A per hour', 'B per day', 'Age']

字符串前面的模式 captures an arbitrary word, rather than just recognizing hour. The change from per hour to per in the substitution puts that captured word (group 1 in the pattern), rather than just hour. (The r 中从 hour(.+) 的变化只是意味着 \ 按字面解释,而不是转义。)