从列中清除字符/str并将其转换为整型存在问题



我写了这个函数来清除列中的+和:

def data_clean_installs(x):
if '+' in x:
return float(x.replace('+',''))
elif ',' in x:
return float(x.replace(',',''))
else:
return float(x)

我想使用这个函数来创建一个新的int列,名为' clean_installing ',并运行如下:

apr['Clean_Installs'] = apr.Installs.astype('str').apply(data_clean_installs).apply(int)
得到这个ValueError: could not convert string to float: '10,000'

我试过了我能想到的一切,太多了,不能放在这里,请接受任何输入…我是新来的,这是我第一次提问题。如果我违反了任何规定,我很抱歉……真的希望有人能帮忙。谢谢!

这里不需要自定义函数,因为您似乎已经在使用Pandas:

apr.Installs.str.replace("[,+]", "", regex=True).apply(int)

我唯一关心的是使用.apply(int),它会失败的情况下,你有列中的值不会转换为整数,如"1,000.53"

作为一点解释,regex=True告诉Pandas模式(Series.str.replace中的第一个参数)应该被视为正则表达式。

模式[,+]中的方括号构成了一个字符类。该模式基本上告诉Pandas,使用regex匹配任何包含任何这些字符的字符串,",""+"或两者,并将它们替换为空字符串。

Regex是超级强大的,但有它的时间和地点。这就是其中一次!

可能10,000曾经是+10,000或类似的东西。在函数data_clean_installs中,如果找到+,则尝试转换,但那里也有,。你的函数应该是这样的:

def data_clean_installs(x):
return float(x.replace('+', '').replace(',', ''))

您不需要检查x是否有+,,替换将已经为您提供并将其自动转换为''

同样,如果您将其转换为int之后,您可以在data_clean_installs中使用int调用替换float调用,如果所有值都保证为整数

您可以这样做:

import re
apr['Clean_Installs'] = apr.Installs.apply(lambda x: int(re.sub('[+,]', '', x)))

相关内容

  • 没有找到相关文章

最新更新