python - 正则表达式::'pandas._libs.interval.Interval' 对象没有属性 'replace'

标签 python regex data-wrangling

我有一个带有列的数据框

id       bins                  
1      (2, 3]        
2      (4, 5]       
3      (6, 7]        
4      (8, 9]       
5      (10, 11]      

我正在尝试得到这样的东西。

    id       bins                  
    1      2 -  3        
    2      4 -  5       
    3      6 -  7        
    4      8 -  9       
    5      10 -  11 

我的目标是使用正则表达式来实现这一点。恐怕我不是正则表达式方面的专家。这部分是我尝试过但没有成功的解决方案。

   df['bins'].astype(str).str.replace(']', ' ')
   df['bins'].astype(str).str.replace(',', ' - ')
   df['bins'] = df['bins'].apply(lambda x: x.replace('[','').replace(']',''))

任何帮助将不胜感激!!

提前致谢

最佳答案

你可以使用

df['bins'] = df['bins'].astype(str).str.replace(r'[][()]+', '', regex=True).str.replace(',', ' - ')

注意:

  • .replace(r'[][()]+', '', regex=True) - 删除一个或多个 ], [() 字符
  • .str.replace(',', ' - ') - 将所有逗号替换为空格+-+空格。

另一种方式:

df['bins'].astype(str).str.replace(r'\((\d+)\s*,\s*(\d+)]', r'\1 - \2', regex=True)

这里,\((\d+)\s*,\s*(\d+)] 匹配

  • \( - 一个 ( char
  • (\d+) - 第 1 组 (\1):一位或多位数字
  • \s*,\s* - 包含零个或多个空格的逗号
  • (\d+) - 第 2 组 (\2):一位或多位数字
  • ] - ] 字符。

Pandas 测试:

>>> import pandas as pd
>>> df = pd.DataFrame({'bins':['(2, 3]']})
>>> df['bins'].astype(str).str.replace(r'\((\d+)\s*,\s*(\d+)]', r'\1 - \2', regex=True)
0    2 - 3
Name: bins, dtype: object
>>> df['bins'].astype(str).str.replace(r'[][()]+', '', regex=True).str.replace(',', ' - ')
0    2 -  3
Name: bins, dtype: object

关于python - 正则表达式::'pandas._libs.interval.Interval' 对象没有属性 'replace',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68985142/

相关文章:

python - 使用 raise 函数在发生错误后停止执行 python 中的进一步代码

r - 创建一个新变量,仅当满足 R 中的条件时才打印一系列列中的第一个值

python - 如何使用 python opencv 裁剪图像中最大的对象?

python - OpenCV (Python) 中 cv2.findHomography 的输出

python - 在pylab中以不同颜色显示多个掩码

java - 理解量词

java replaceAll 不适用于\n 字符

regex - 在文件中查找特定文本并用其他文本包裹

反转变量中非 NA 值的顺序

r - R中如何将列名及其下的不同值转换为键值对?