将对象转换为int时出现值错误



我的数量dtype是object(来自csv文件(,我正试图使用以下代码转换为int:

df[x1] = df[x1].astype(str).astype(int)

它抛出如下错误:

ValueError: invalid literal for int() with base 10: '1,000.000'

有人能帮我吗?

您需要删除',''.'。您可以使用str.replace方法删除逗号,然后将数据强制转换为float类型,然后再转换为int类型。

df[x1] = df[x1].str.replace(',','').astype(float).astype(int)

例如,对于这样的系列

srs = pd.Series(['1,000.00','1'])

如果将其强制转换为数据类型int

srs.astype(int)

你得到

ValueError: invalid literal for int() with base 10: '1,000.00'

然后,如果删除逗号str.replace方法并强制转换为数据类型int

srs = srs.str.replace(',','')
srs.astype(int)

你得到

ValueError: invalid literal for int() with base 10: '1000.00'

所以你把它转换成dtype float和dtype int,

srs = srs.str.replace(',','').astype(float).astype(int)

你得到了预期的结果:

0    1000
1       1
dtype: int32

您可以使用lambda函数!

df[x1] = df[x1].apply(lambda x: int(x)) 

实际上,int((函数需要一个整数字符串或浮点值,但不需要浮点值字符串。如果给定了一个float字符串,则需要先将其转换为float,然后转换为int,如下所示:

int(float(userGuess))

所以你必须先把它转换成float,然后再转换成int

相关内容

最新更新