#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
, и здесь вы напрямую фильтруете.