我有一个数据框,其中一列表示年龄范围。年龄列的数据类型显示为字符串。我正在尝试将字符串值转换为数字,以供模型解释功能。
我尝试将以下内容转换为“ 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值
答案 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()