无法将对象作为字符串转换为int-无法解析字符串

时间:2019-05-09 15:06:15

标签: python-3.x pandas data-cleaning

我有一个数据框,其中一列表示年龄范围。年龄列的数据类型显示为字符串。我正在尝试将字符串值转换为数字,以供模型解释功能。

enter image description here

我尝试将以下内容转换为“ int”。

df.Age = pd.to_numeric(df.Age)

我收到以下错误:

ValueError: Unable to parse string "0-17" at position 0

我也尝试使用'errors = coerce'参数,但这给了我一个不同的错误:

df.Age = pd.to_numeric(df.Age, errors='coerce').astype(int)

错误:

ValueError: Cannot convert non-finite values (NA or inf) to integer

但是我的df中的任何列中都没有NA值

3 个答案:

答案 0 :(得分:0)

乍一看,这是因为您正在尝试转换不仅包含int的字符串。您的字符串是“ 0-17”,不是整数。如果它是“ 17”或“ 0”,则转换将起作用。

    val = int("0")
    val = int("17")

我不知道您的to_numeric方法是什么,所以不确定是否要回答您的问题。

答案 1 :(得分:0)

Age似乎是categorical variable,因此您应该这样对待。 pandas具有整洁的category dtype,可将标签转换为引擎盖下的整数:

df['Age'] = df['Age'].astype('category')

然后,您可以使用cat访问器方法来访问基础整数

codes = df['Age'].cat.codes # This returns integers

您还可能希望将Age设为有序的分类变量,为此您还可以在the docs中找到一个简洁的配方。

from pandas.api.types import CategoricalDtype

age_category = CategoricalDtype([...your labels in order...], ordered=True)

df['Age'] = df['Age'].astype(age_category)

然后,您可以以相同的方式访问基础代码,并确保它们将反映您为标签输入的顺序。

答案 2 :(得分:0)

你为什么不split

FuncSpecialize

这是我最后得到的!

a=df["age"].str.split("-", n=2, expand=True)
df['age_from']=a[0].to_frame()
df['age_to']=a[1].to_frame()