Удаление значений определенного типа объекта из столбца фрейма данных в Pandas

#pandas #dataframe #data-cleaning #drop

#pandas #фрейм данных #очистка данных #удаление

Вопрос:

У меня есть фрейм данных pandas, где некоторые значения являются целыми числами, а другие значения представляют собой массив. Я просто хочу удалить все строки, содержащие массив (я полагаю, тип данных объекта) в моем столбце «ORIGIN_AIRPORT_ID», но я не смог понять, как это сделать, попробовав множество методов.

Вот как выглядят первые 20 строк моего фрейма данных. Значения, которые отображаются в виде списка, — это те, которые я хочу удалить. Набор данных состоит из пары миллионов строк, поэтому мне просто нужно написать код, который удаляет все массивоподобные значения в этом конкретном столбце фрейма данных, если это имеет смысл.

фрейм данных

Ответ №1:

 df = df[df.origin_airport_ID.str.contains(',') == False]
  

Ответ №2:

В следующий раз вам следует подумать о том, чтобы предоставить нам образец данных в виде текста, а не рисунка. Нам проще протестировать ваш пример.

Исходные данные:

     ITIN_ID             ORIGIN_AIRPORT_ID
0  20194146                         10397
1  20194147                         10397
2  20194148                         10397
3  20194149  [10397, 10398, 10399, 10400]
4  20194150                         10397
  

В вашем случае вы можете использовать функцию .to_numeric pandas:

 df['ORIGIN_AIRPORT_ID'] = pd.to_numeric(df['ORIGIN_AIRPORT_ID'], errors='coerce')
  

Он заменяет каждую ячейку, которая не может быть преобразована в число, на NaN (не число), поэтому мы получаем:

     ITIN_ID  ORIGIN_AIRPORT_ID
0  20194146            10397.0
1  20194147            10397.0
2  20194148            10397.0
3  20194149                NaN
4  20194150            10397.0
  

Чтобы удалить эти строки, теперь просто используйте .dropna

 df = df.dropna().astype('int')
  

Что приводит к желаемому фрейму данных

     ITIN_ID  ORIGIN_AIRPORT_ID
0  20194146              10397
1  20194147              10397
2  20194148              10397
4  20194150              10397
  

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

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