首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本字符串K&M转换为10^3和10^6

将文本字符串K&M转换为10^3和10^6
EN

Stack Overflow用户
提问于 2019-05-14 15:52:30
回答 1查看 143关注 0票数 1

我有列值的数据帧-

代码语言:javascript
复制
[Themangoescosts$1K]
[needtopay20K,10Kdollarsmakesagrand]

我需要转换K-10^3

我不确定如何使用regex选项替换数据帧列中列表的匹配值。

用下面的正则表达式来识别K&M案件-

代码语言:javascript
复制
match = re.search("[\d.]+[KM]+", row)

并计划使用以下物品以取代-

代码语言:javascript
复制
mp = {'K':' * 10**3', 'M':' * 10**6'}
df2['c'] = pd.eval(df2.offer2.replace(mp.keys(), mp.values(), regex=True).str.replace(r'[\d.]+[KM]+',''))

会导致错误-

代码语言:javascript
复制
UndefinedVariableError: name 'nan' is not defined

预期产出-

代码语言:javascript
复制
[Themangoescosts$1000]
[needtopay20000,10000dollarsmakesagrand]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 20:38:11

我建议用

代码语言:javascript
复制
df['c'] = df['offer2'].str.replace(r'(?<!\d)(\d{1,3})([KM])', lambda x: '{}000'.format(x.group(1)) if x.group(2) == 'K' else '{}000000'.format(x.group(1)) )

要点是,在使用Series.str.replace时,您可以使用一个可调用的替换参数。

Regex描述

  • (?<!\d) -当前位置左侧不允许任何数字
  • (\d{1,3}) -第一组:一到三位数
  • ([KM]) -第2组:LM

如果组2值为lambda x: '{}000'.format(x.group(1)) if x.group(2) == 'K' else '{}000000'.format(x.group(1)),则替换组1+ 000,否则使用附加000000的组1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56134319

复制
相关文章

相似问题

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