我有一个带有列的数据框
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/