Преобразование столбца типа str (с числом и словами) в int pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть столбец, который содержит тип str как чисел, так и слов:

пример.

 ['2','3','Amy','199','Happy']
 

И я хочу преобразовать все «str number» в int и удалить (строки с) «str words».

Таким образом, мой ожидаемый результат будет списком, как показано ниже:

 [2, 3, 199]
 

Поскольку у меня есть фрейм данных pandas, и это должен быть один из столбцов, было бы еще лучше, если бы он мог быть Series следующим:

 0      2.0
1      3.0
3    199.0
dtype: float64
 

Комментарии:

1. что вы пробовали до сих пор?

2. @rko Он хочет удалить нецелочисленные значения, как в моем ответе.

3. Полностью пропустил удаление этого

4. Ваши входные данные представляют собой фрейм данных pandas или список?

Ответ №1:

Как вы упомянули, у вас есть столбец (серия), поэтому предположим, что он называется s :

 s = pd.Series(['2', '3', 'Amy', '199', 'Happy'])
 

Затем после назначения просто выполните pd.to_numeric и введите параметр errors='coerce' . Затем удалите NaN s с помощью dropna :

 print(pd.to_numeric(s, errors='coerce').dropna())
 

Затем приведенный выше код выведет:

 0      2.0
1      3.0
3    199.0
dtype: float64
 

Ответ №2:

без использования pandas, поскольку вы предоставляете массив

 import re
data = ['2','3','Amy','199','Happy']
for item in data:
    print (*re.findall(r'd ',item))
 

даст

 2
3

199
 
 

и

 import re
data = ['2','3','Amy','199','Happy']
out = []
for item in data:
    m = str(*re.findall(r'd ',item))
    if m != "":
        out.append(int(m))
print (out)
 

даст

 [2, 3, 199]
 

Комментарии:

1. Я думаю, он хочет, чтобы результат был в списке только с целочисленными значениями

2. Я думал, что он сказал столбец, поэтому я предположил, что df

3. согласен, здесь int, а не float . И вот более общее решение, которое будет работать с массивами… просто еще один способ снять шкуру с кошки

Ответ №3:

Вы можете использовать isnumeric для фильтрации нечисловых элементов.

 s = pd.Series(['2','3','Amy','199','Happy'])
print(s[s.str.isnumeric()].astype(int))
 

Вывод:

 0      2
1      3
3    199
dtype: int64
 

Комментарии:

1. Хороший ответ 1, в моем ответе я использую pd.to_numeric , и здесь вы напрямую фильтруете.