2017-01-11 178 views
0

我有一个应该是数字的值的列表。现在他们的目标不过:无法将对象转换为int

later  object 
opstarten object 
dtype: object 

我试图通过边做边改列到STR类型:

df_analyse_num[["later"]] = df_analyse_num[["later"]].astype(str) 

这似乎并不但是工作因为当我分析我的类型它仍然说对象。

此外,当我尝试将其转换为字符串出现问题时。如果我做的:

df_analyse_num[["later"]] = df_analyse_num[["later"]].astype(str).astype(int) 

它给了我下面的错误:

File "pandas\lib.pyx", line 937, in pandas.lib.astype_intsafe (pandas\lib.c:16667) 
File "pandas\src\util.pxd", line 60, in util.set_value_at (pandas\lib.c:67540) 
ValueError: invalid literal for int() with base 10: '30.0' 

有什么想法这哪里出了问题?

+0

不是一个对大熊猫专家,但尽量'float'然后'int':' something.astype(str).astype(float).astype(int)' –

+0

完全作品,谢谢! –

+2

首先'object'指的是numpy对象的类型,这是正确的,在pandas中你不会看到'str'作为'dtype',其次如果你想把你的列转换为数字用'pd.to_numeric(df_analyse_num [“稍后“],errors ='coerce')'这将推断适当的类型,'int'用于没有缺失值的地方,所有值可以毫无错误地转换为int。同样使用双方括号:'df_analyse_num [[“later”]]'返回单个列df而不是系列,以防万一您不知道 – EdChum

回答

1

对大熊猫的专家,但尝试float首先要处理小数点这表明浮点数,则int

something.astype(str).astype(float).astype(int) 

这里是“天然的”蟒蛇问题:

int('30.0') 

这同样会失败:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '30.0' 

如果我们使用float首先它的作品,因为转换floatint是可能的:

int(float('30.0')) 

预期结果:

30