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

时间:2019-05-14 15:52:30

标签: python regex pandas

我有带有列值的数据框-

[Themangoescosts$1K]
[needtopay20K,10Kdollarsmakesagrand]

我需要转换K-10 ^ 3

我不确定如何使用正则表达式选项替换数据框列中列表的匹配值

使用以下正则表达式确定K&M案例-

match = re.search("[\d.]+[KM]+", row)

并计划在下面使用其替换项目-

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]+',''))

哪个会导致错误-

UndefinedVariableError: name 'nan' is not defined

预期输出-

[Themangoescosts$1000]
[needtopay20000,10000dollarsmakesagrand]

1 个答案:

答案 0 :(得分:0)

我建议使用

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时,可以使用callable作为替换参数。

正则表达式说明

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

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