Mam DataFrame, którą muszę zmodyfikować na podstawie jednej z wartości kolumn. W szczególności, gdy wartość w kolumnie a przekracza 110, chcę, aby kolumnie b przypisano wartość -99. Jedynym problemem jest to, że pierwsze 3 wiersze ramki danych zawierają mieszankę ciągów i liczbowych typów danych, więc kiedy próbuję:

df.loc[df['a'] >= 110, 'b'] = -99

Otrzymuję TypeError, ponieważ porównanie między str a int jest niedozwolone.

Więc moje pytanie brzmi: jak zrobić to przypisanie, ignorując pierwsze 3 wiersze ramki danych?

Do tej pory wymyśliłem dość podejrzany sposób:

try:
    df.loc[df['a'] >= 110, 'b'] = -99
except TypeError:
    pass

Wydaje się, że to działa, ale najwyraźniej nie wydaje się, aby to był właściwy sposób.

EDYCJA: Ta metoda również pomija pierwsze 3 wiersze, ale naprawdę muszę je zachować.

1
pavel 9 styczeń 2020, 03:52

1 odpowiedź

Najlepsza odpowiedź

Próbować:

df.loc[df['a'].apply(pd.to_numeric, errors='coerce').ge(110), 'b'] = -99

Lub użyj errors='ignore'

1
Kenan 9 styczeń 2020, 01:56