我的数量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