Заменить только числовые значения - PullRequest
0 голосов
/ 22 марта 2019

Я должен заменить только числовые значения в столбце C на «прибыль», если C.values ​​больше 50

У меня есть следующий код, но он заменяет все, а не только числовые значения

df['C'].values[df['C'].values >= 50] = 'Profit'

Мой фрейм данных

A       B       C
test    NaN     xyz
hit     NaN     10
hit     NaN     90
hit     NaN     abc
test    val     20
test    val     90

Мой вывод

A       B       C
test    NaN    Profit
hit     NaN     10
hit     NaN     Profit
hit     NaN     Profit
test    val     20
test    val    Profit

Мой желаемый вывод

A       B       C
test    NaN    xyz
hit     NaN     10
hit     NaN     Profit
hit     NaN     abc
test    val     20
test    val     Profit

Ответы [ 3 ]

3 голосов
/ 22 марта 2019

Я бы использовал здесь .apply() с блоком try-exc и блоком if-else.

Что-то вроде:

def convert_to_profit(value):
    try:
        if int(value) >= 50:
            return 'Profit'
        else:
            return value
    except ValueError:
        return value

df.loc[:, 'C'] = df['C'].apply(convert_to_profit)

Блок try-exc позволит вам перехватывать нечисловые значения и возвращать незамещенное значение.

1 голос
/ 22 марта 2019

Более кратким решением может быть:

df['C'][df['C'].apply(lambda x: x > 50 if isinstance(x, int) else False)] = 'Profit'

0 голосов
/ 22 марта 2019

Вы можете перебирать строки данных и редактировать каждую строку при необходимости:

for idx, row in df.iterrows():
    try:
        if int(row['C']) >= 50:
            row['C'] = 'Profit'
    except ValueError:
        pass

Из документов панд:

df.iterrows ()
Итерация по строкам DataFrame в виде пар (индекс, серия).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...