我有带有列值的数据框-
[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]
答案 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组:L
或M
。如果组2的值为lambda x: '{}000'.format(x.group(1)) if x.group(2) == 'K' else '{}000000'.format(x.group(1))
,则000
替换将替换为组1 + K
,否则,将使用附加了000000
的组1。