Python 熊猫-在数字前插入一个开/关括号或一个负号
我有一个列,其中的数据有时会缺少圆括号:所需的输出是要么删除大括号并在数字前引入负号,要么添加开始/结束大括号(如果缺少)。例如—“10752”至“-10752”或“(10752)” 输入-Python 熊猫-在数字前插入一个开/关括号或一个负号,python,regex,pandas,Python,Regex,Pandas,我有一个列,其中的数据有时会缺少圆括号:所需的输出是要么删除大括号并在数字前引入负号,要么添加开始/结束大括号(如果缺少)。例如—“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
名称:销售,数据类型:对象
所需输出
或者-
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
或
如您所见,“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\n15060\n2(4756)\n3(16572)\n4(14673)\n'
testz.replace(r'\((\d+(?:\.\d+))\b(?)\b(?您希望在任何数字之前添加一个-
,该数字在左侧、右侧或两侧至少用一个括号括起来
使用基于交替的正则表达式:
df['testz'].str.replace(r'\(?\s*(\d+(?:,\d+)?)\s*\)|\(\s*(\d+(?:,\d+)?)\s*\)?', r'-\1\2')
见
详细信息
\(?\s*(\d+(?:,\d+)\s*\)
-可选的(
,0+空格,第1组:1+位数,后跟可选的,
和1+位数序列;然后是0+空格和)
字符
|
-或
\(\s*(\d+(?:,\d+)\s*\)?
-a(
字符,0+空格,第1组:1+位数,后跟可选的,
和1+位数序列;然后是0+空格和可选的)
字符
如果您需要括号来识别数字,为什么要删除括号?另外,如果您使用Pandas编写,请保留Pandas并显示适当的代码。我认为您需要类似于df['col'].str.replace(r'\(\d+(?:\.\d+)\b(?!\)\124b的内容(?好的,为了区分它们,我需要完成括号或在数字前面加一个“-”负号,因为它们是负数..谢谢,我会尝试你提到的…:)str.replace(r'\(\d+(?:,\d+)\b(?),\d{3}\b)\b(?@WiktorStribiżew此代码适用于给定的输入,但只要我将输入更改为:testz='80123\n1 5060\n2(4756)\n3(16572)\n4(14673)\n它停止工作..你知道什么可能是错误的吗?让我们试着重新开始这个问题,我将投票。你能告诉我你是否可以使用PyPi正则表达式模块,或者你是否因为某些原因被限制在re
?是的,谢谢你提供的详细信息,我不太擅长正则表达式,我现在可以更好地理解它了!!:)
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')
df['testz'].str.replace(r'\(?\s*(\d+(?:,\d+)?)\s*\)|\(\s*(\d+(?:,\d+)?)\s*\)?', r'-\1\2')