#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. Большое вам спасибо! это именно то, что я искал, и это сработало отлично. Я обязательно приведу образец данных в текстовом виде, в первый раз, поэтому я ценю терпение!