Ошибка Python pandas drop_duplicates ()

#python #pandas

#python #pandas

Вопрос:

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

Файл данных слишком велик, чтобы вставить сюда выходные данные, поэтому вот пара фотографий, объясняющих мою текущую проблему.

перед запуском drop (попытка удалить дубликат tconst)

после запуска drop (удаляет слишком много строк)

 
origin = pd.read_table('akas.tsv')

origin.drop(origin.columns[[1,2,5,6,7]], axis=1, inplace=True)
origin.columns = ['tconst','region','language']
origin.drop_duplicates(subset = 'tconst', keep = False, inplace = True) 
print(origin)
  

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

1. Запуск drop_duplicates(subset = 'tconst', keep=False) удаляет все строки, в которых "tconst" есть повторяющееся значение, и, похоже, для меня все работает нормально. Что вы ожидаете в качестве вывода? (почему вы думаете, что он удаляет «слишком много строк»?). Также в будущем, пожалуйста, воздержитесь от публикации фреймов данных в виде изображений. Скопируйте / вставьте их в виде текста в свой вопрос.

2. сохранить = ‘первый’ ?

3. @CameronRiddell Первый вывод (перед удалением) имеет несколько tt0000001, tt0000002 и т.д. Ожидаемый результат после удаления должен заключаться в том, чтобы увидеть только один из них, однако, похоже, он удаляет их все вместе и запускает таблицу с tt0000019.

Ответ №1:

Если вы хотите сохранить одну запись каждого дубликата (вместо всех дубликатов), вы не должны использовать keep=False . Цитирование документации для drop_duplicates

сохранить: {‘first’, ‘last’, False}, значение по умолчанию ‘first’ Определяет, какие дубликаты (если таковые имеются) следует сохранить.

первое: удалите дубликаты, за исключением первого вхождения.
последнее: удаление дубликатов, за исключением последнего вхождения.
False: удалить все дубликаты.

Указав keep=False , как у вас есть, вы даете указание pandas удалить все строки, содержащие дубликаты. Если вместо этого вы укажете keep="first" , что ваш фрейм данных сохранит первую запись любых дубликатов и удалит все остальные (что, похоже, вы ожидаете).