【问题标题】:pandas replacing by function output (Applying a function to rows based on regex)pandas 由函数输出替换(将函数应用于基于正则表达式的行)
【发布时间】:2023-04-06 11:30:02
【问题描述】:

基本上我有一个看起来像这样的数据框:

ID NAME                      PAINT
0  some_name:target          blue
1  some_other_name           pink
2  other_name: other_target  yellow
3  other_name                black

并且只想通过对其应用函数来替换遵循某个正则表达式的值。

def f(x):
  name, target = x.split(":")
  return "[" + target + "]" + " " + name
ID NAME                        PAINT
0  [target] some_name          blue
1  some_other_name             pink
2  [other_target] other_name   yellow
3  other_name                  black

我想它会看起来像这样,但不管用什么

df.replace(to_replace=strings_found_by_regex, value=f(strings_found_by_regex))

这可以通过遍历行并查看这些单元格是否与正则表达式匹配然后应用f(x) 来完成,但这看起来相当难看,我想知道是否有更好的方法。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    试试这个,使用Series.str.replace

    在这里找到正则表达式的解释, regex101.com

    df.NAME.str.replace("(.+)\s*:\s*(.+)", r"[\2] \1")
    

    0           [target] some_name
    1              some_other_name
    2    [other_target] other_name
    3                   other_name
    Name: NAME, dtype: object
    

    【讨论】:

    • 不应该去掉 \2 吗?行索引 2 NAME 列所需的答案是[other_target] other_name,而此答案提供[ other_target] other_name(即[ other_target] 中的额外空间。
    • 关心解释原始字符串部分吗?谢谢!
    • @MatejNovosad,用替换更新正则表达式链接,这里是 link 讨论反向引用的线程
    • @MatejNovosad 这是另一个有趣的link,它解释了“\1”的作用。希望它能澄清您的疑问。
    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2020-10-16
    相关资源
    最近更新 更多