我写了这个函数来清除列中的+和:
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)))