首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex::“pandas._libs.interval.Interval”对象没有属性“替换”

Regex::“pandas._libs.interval.Interval”对象没有属性“替换”
EN

Stack Overflow用户
提问于 2021-08-30 13:40:15
回答 2查看 707关注 0票数 1

我有一个列的数据帧

代码语言:javascript
复制
id       bins                  
1      (2, 3]        
2      (4, 5]       
3      (6, 7]        
4      (8, 9]       
5      (10, 11]      

我想得到这样的东西。

代码语言:javascript
复制
    id       bins                  
    1      2 -  3        
    2      4 -  5       
    3      6 -  7        
    4      8 -  9       
    5      10 -  11 

我的目标是使用regex来实现这一点。恐怕我不是那个regex专家。这在一定程度上是我尝试过但没有成功的解决办法。

代码语言:javascript
复制
   df['bins'].astype(str).str.replace(']', ' ')
   df['bins'].astype(str).str.replace(',', ' - ')
   df['bins'] = df['bins'].apply(lambda x: x.replace('[','').replace(']',''))

任何帮助都将不胜感激!

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-30 13:45:29

您可以使用

代码语言:javascript
复制
df['bins'] = df['bins'].astype(str).str.replace(r'[][()]+', '', regex=True).str.replace(',', ' - ')

注意:

  • .replace(r'[][()]+', '', regex=True) -删除一个或多个][() chars
  • .str.replace(',', ' - ') --用space+-+space.

替换所有逗号。

另一种方式是:

代码语言:javascript
复制
df['bins'].astype(str).str.replace(r'\((\d+)\s*,\s*(\d+)]', r'\1 - \2', regex=True)

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

  • \( -a ( char
  • (\d+) - Group 1 (\1):一个或多个digits
  • \s*,\s* -一个以零或多个whitespaces
  • (\d+)括起来的逗号-第2组(\2):一个或多个digits
  • ] -一个] char.

熊猫测试:

代码语言:javascript
复制
>>> 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
票数 1
EN

Stack Overflow用户

发布于 2021-08-30 13:52:30

你做到了

代码语言:javascript
复制
   df['bins'].astype(str).str.replace(']', ' ')
   df['bins'].astype(str).str.replace(',', ' - ')

但是.str.replace在内部不工作,您应该重新分配返回的内容,否则不会对您的pandas.DataFrame做任何更改,这是一个简单的例子:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'col1':[100,200,300]})
df['col1'].astype(str).str.replace('100','1000')
print(df)  # there is still 100
df['col1'] = df['col1'].astype(str).str.replace('100','1000')
print(df)  # now there is 1000 rather than 100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68985142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档