Невозможно преобразовать объект как строки в int - Невозможно разобрать строку - PullRequest
1 голос
/ 09 мая 2019

У меня есть фрейм данных с одним столбцом, обозначающим диапазон возрастов.Тип данных столбца Возраст отображается в виде строки.Я пытаюсь преобразовать строковые значения в числовые для модели, чтобы интерпретировать особенности.

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

Но в моем столбце нет значений NA в моем df

Ответы [ 3 ]

0 голосов
/ 09 мая 2019

Age кажется категориальной переменной , поэтому вы должны обращаться с ней как с таковой.pandas имеет аккуратный category dtype, который преобразует ваши метки в целые числа под капотом:

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

Затем вы можете получить доступ к базовым целым числам с помощью метода доступа cat

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

Также вы, вероятно, захотите сделать Age упорядоченной категориальной переменной, для которой вы также можете найти аккуратный рецепт в документах .

from pandas.api.types import CategoricalDtype

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

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

Затем вы можете получить доступ к базовым кодам таким же образом и быть уверенными, что они будут отражать порядок, который вы ввели для своих ярлыков.

0 голосов
/ 09 мая 2019

Почему бы тебе не split

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

Вот что я получил в конце!

         date    age
0  2018-04-15  12-20
1  2018-04-15   2-30
2  2018-04-18  5-46+
         date    age age_from age_to
0  2018-04-15  12-20       12     20
1  2018-04-15   2-30        2     30
2  2018-04-18  5-46+        5    46+
0 голосов
/ 09 мая 2019

На первый взгляд, я бы сказал, что это потому, что вы пытаетесь преобразовать строку, в которой есть не только int.Ваша строка "0-17", которая не является целым числом.Если бы это было "17" или "0", преобразование сработало бы.

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

Я не знаю, каков ваш метод to_numeric, поэтому я не уверен, отвечаю ли я на ваш вопрос.

...