如何重命名其中包含某些单词的列
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
现在我想:
- 遍历所有数据帧(我已经做到了)
- 将所有的“(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
到 (.+)
的变化只是意味着 \
按字面解释,而不是转义。)
这里是 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
现在我想:
- 遍历所有数据帧(我已经做到了)
- 将所有的“(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
到 (.+)
的变化只是意味着 \
按字面解释,而不是转义。)