Pandas在数字前插入一个开/关括号或插入一个负号

2024-04-27 05:49:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列,其中的数据有时会缺少圆括号:所需的输出是要么删除大括号并在数字前引入负号,要么添加开始/结束大括号(如果缺少)。例如—“10752”至“-10752”或“(10752)”

输入-

 0. 21,028 
 1. 11,689 
 2. 94 
 3. 10,572) 
 4. 2,261

名称:销售,数据类型:对象

所需输出

或-

 0. 21,028 
 1. 11,689 
 2. 94 
 3. (10,572) 
 4. 2,261

 0. 21,028 
 1. 11,689 
 2. 94 
 3. -10,572 
 4. 2,261

可能吗?或者,你可以把它看成这样的字符串:

testz = '21,028 \n1    11,689 \n2        94 \n3    10,572) \n4     2,261 \n

要求的输出:

21,028 \n1    11,689 \n2        94 \n3    (10,572) \n4     2,261 \n

21,028 \n1    11,689 \n2        94 \n3    -10,572 \n4     2,261 \n

如您所见,“10572”替换为(10572)或-10572

现在我知道了如何一起删除括号-re.sub(r'[()]', r'', testz)

但是要诱导一个或用负数替换这个数,我不知道怎么做

如果我添加新输入:

0.        80,123 
1.         5,060 
2.      (4,756 ) 
3.     ( 16,572) 
4.    ( 14,673 )
Name: sale , dtype: object

testz = '80123 \n1    5,060 \n2        (4756) \n3    (16,572) \n4     (14,673) \n '
testz.replace(r'\((\d+(?:\.\d+)?)\b(?!\))|\b(?<!\()(\d+(?:\.\d+)?)\)', r'-\1\2')

停止工作。你知道会出什么问题吗


Tags: 数据对象字符串名称数字大括号括号数据类型
1条回答
网友
1楼 · 发布于 2024-04-27 05:49:54

您希望在任何数字之前添加一个-,该数字在左侧、右侧或两侧至少用一个括号括起来

使用基于交替的正则表达式:

df['testz'].str.replace(r'\(?\s*(\d+(?:,\d+)?)\s*\)|\(\s*(\d+(?:,\d+)?)\s*\)?', r'-\1\2')

regex demo

详细信息

  • \(?\s*(\d+(?:,\d+)?)\s*\)-可选的(,0+空格,第1组:1+位,后跟可选的,和1+位序列;然后是0+个空格和一个)字符
  • |-或
  • \(\s*(\d+(?:,\d+)?)\s*\)?-a(字符,0+空格,第1组:1+个数字,后跟可选的,和1+个数字序列;然后是0+空格和可选的)字符

相关问题 更多 >