python - 在保持变量的同时更改 Pandas 中的字符串

标签 python regex pandas

我的 Pandas 数据 (df['case']) 包含两种引用美元金额的方式:

  • 他为电脑支付了 500 美元。
  • 他为电脑支付了 500 美元。
  • 交易以美元和欧元完成。

差异在于空白处。我现在想将“USD”替换为“USD”,但前提是 USD 后跟一个数字 - 同时保留该数字。

df['case'] = df['case'].str.replace('USD ', 'USD', re.IGNORECASE)

将不起作用,因为它还会包含后面不跟数字的实例(请参阅第三个示例)。

df['case'] = df['case'].str.replace('USD (\d+)', 'USD', re.IGNORECASE)

这将仅匹配后面跟着数字的情况,但也会替换数字。有没有办法告诉它找到变量然后替换除变量之外的所有内容?基本上:

df['case'] = df['case'].str.replace('USD (\d+)', 'USD(\d+)', re.IGNORECASE)

第二个 (\d+) 不是按字面意思理解的,而是作为之前数字的占位符,将再次插入此处。

我也尝试过:

for row in df['case'].str.contains('USD (\d+), re.IGNORECASE):
   df['case'] = df['case'].str.replace('USD ', 'USD', re.IGNORECASE)

后者无法迭代行,而仅在包含字符串的行中执行更改。后者的解决方案也将有助于解决其他问题。

最佳答案

使用

(?i)USD\s+(?=\d)

详细信息

  • (?i) - 启用不区分大小写的搜索
  • USD - 字面量 USD
  • \s+ - 1 个以上空白字符
  • (?=\d) -(积极的前瞻确保)下一个字符应该是不会添加到匹配值中的数字,因此不会被替换。

在 Pandas 中:

df['case'] = df['case'].str.replace(r'(?i)USD\s+(?=\d)', 'USD')

请参阅regex demo

如果您需要保留USD在其原始情况下,使用

df['case'] = df['case'].str.replace(r'(?i)(USD)\s+(?=\d)', r'\1')

即捕获USD进入捕获组,然后使用 \1反向引用/占位符引用字符串替换模式中的该组值。

关于python - 在保持变量的同时更改 Pandas 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944285/

相关文章:

javascript - 此正则表达式验证中缺少什么?

python - 更多 pythonic 方法来做到这一点(字符串拆分)?

python - 如何重写AssertionError

javascript - 如何在字符串中递归替换字符

用于匹配 "ABAB"、 "AABB"、 "ABB"、 "AAB"、 "ABAC"和 "ABCB"的 C# 正则表达式

python - Tensorflow DNNclassifier : error wile training (numpy. ndarray 没有属性索引)

python - 不同列中每个 id 的唯一字符串的累积计数

python - 仅从数据框中返回位置值的最简单方法

python - pycrypto 不会为 AES(CFB 模式)复制 NIST 测试向量

python--表达式的舍入值--意外的 EOF