【问题标题】:Pandas dataframe: change string values based on condition with regexPandas 数据框:使用正则表达式根据条件更改字符串值
【发布时间】:2021-11-16 06:14:40
【问题描述】:

我有一个数据框,其中数字表示为字符串。我需要删除括号(如果存在)并添加一个负号。例如,(30) 应该变成 -30。

正数不应改变。

df = pd.DataFrame({'a':['19','(30)','(1000)'],
                   'b':['(202)','200', '100'],
                   'c':['101','(30)', '40']})

        a      b     c
0      19  (202)   101
1    (30)    200  (30)
2  (1000)    100    40

对于正则表达式,我可以对单个值执行此操作:

neg_pat = r'\((\d+)\)'
num = '(30)'
new_num = '-' + re.search(neg_pat, num).group(1)
print(new_num)
-30

现在,如何将其应用于数据框?我之前使用过 apply() 和 lambda 表达式,但我一直坚持将它们放在一起。

【问题讨论】:

标签: python-3.x regex pandas


【解决方案1】:

您可以使用replace

out = df.replace({'\((.*)\)':'-\\1'},regex=True).astype(int)
Out[280]: 
      a    b    c
0    19 -202  101
1   -30  200  -30
2 -1000  100   40

【讨论】:

  • 这是一个新的 - 我从未见过用大括号替换但我明白了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 2012-06-14
  • 2020-03-29
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多