Удаление дубликатов для строки с дубликатами в динамических данных одного столбца

Я пытаюсь удалить дубликаты для столбца D для динамических данных без заголовков или идентифицирующих функций. Я пытаюсь удалить все строки, в которых есть дубликаты для столбца D. Я конвертирую excel в фрейм данных, удаляю дубликаты, а затем возвращаю их обратно в excel. Однако я продолжаю получать множество ошибок или не удалять дубликаты. Я работаю с VBA, но мы переходим на Python

Попытка:

df.drop_duplicates(["C"])

df = pd.DataFrame({"C"})
df.groupby(["C"]).filter(lambda df:df.shape[0] == 1)

As well an assortment of other variations.  I was able to do this in VBA with one line.  Any ideas why this keeps causing this issue.


\\ import pandas as pd
df = pd.DataFrame({"C"]})
df.drop_duplicates(subset=[''C'], keep=False)


DG=df.groupby([''C'])   
print pd.concat([DG.get_group(item) for item, value in DG.groups.items() if len(value)==1])

Я смог сделать это в VBA с помощью одной строки. Любые идеи, почему это продолжает вызывать эту проблему.

Сам код Шаблон-

df = pd.read_excel("C:/wadwa.xlsx", sheetname=0)
columns_to_drop = ['d.1']
#columns_to_drop = ['d.1', 'b.1', 'e.1', 'f.1', 'g.1']


import pandas as pd


Df = df[[col for col in df.columns if col not in columns_to_drop]]
print(df)

writer = pd.ExcelWriter('C:/dadwa/dwad.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
print(df)

Код:

import pandas as pd

df = pd.read_excel("C:/Users/Documents/Book1.xlsx", sheetname=0)

import pandas as pd
df = df.drop_duplicates(subset=[df.columns[3]], keep=False)

writer = pd.ExcelWriter('C:/Users//Documents/Book2.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
print(df)

person Community    schedule 08.11.2017    source источник
comment
нужно вернуть df = df.drop_duplicates(subset=['C'], keep=False)   -  person jezrael    schedule 08.11.2017
comment
@jezrael Этот код действительно не нравится. Огромная ошибка, когда я вставил это   -  person    schedule 08.11.2017


Ответы (1)


Я думаю, вам нужно вернуть и выбрать 4-й столбец по позиции:

df = df.drop_duplicates(subset=[df.columns[3]], keep=False)
person jezrael    schedule 08.11.2017
comment
Набор данных остается неизменным. Выложу изображение. - person ; 08.11.2017
comment
Данные конфиденциальны? Если нет, можете ли вы отправить мне свой файл на мою электронную почту в моем профиле? Потому что кажется, что проблема зависит от данных. Спасибо. - person jezrael; 08.11.2017
comment
Я поставил код под вопросом вместо внешних ссылок, которые могут сломаться. Я видел, как другие делают это довольно часто, но достаточно сказать, что я не должен подражать чужим плохим привычкам. - person ; 08.11.2017
comment
Если значения не удаляются, проблема в данных. Так что проверьте пробелы или другое отличие. Трудно определить вашу проблему, если у меня нет ваших данных :( - person jezrael; 08.11.2017
comment
Я использую 64-разрядную версию Windows 10, и мой код находится в конце вопроса. Он имеет текст в Excel, преобразует его в фрейм данных, удаляет дубликаты, а затем записывает его в отдельную книгу Excel. Я распечатаю, чтобы увидеть, нет ли там ошибок. Я не думаю, что это удаление дубликатов вообще в соответствии с печатью. - person ; 08.11.2017
comment
Я вижу это сейчас. первый столбец не считается, потому что индекс, поэтому нужен df = df.drop_duplicates(subset=[df.columns[2]], keep=False) - проверьте 3-й столбец. - person jezrael; 08.11.2017
comment
Я перепроверил это несколько раз и получил некоторые странные результаты. Сбросил все и вывод не меняется. - person ; 08.11.2017
comment
Да, это правильный вывод. Поскольку параметр keep=False ir удалил обе строки с D значениями. - person jezrael; 08.11.2017
comment
Первая строка - это столбцы, а первый столбец называется индексом, поэтому нетронутым. - person jezrael; 08.11.2017
comment
imgur.com/a/OIzqD Он имеет тенденцию удалять оба значения e в столбце B. Он также создал пробелы. - person ; 08.11.2017
comment
Хммм, тогда причина должна быть в некоторых пробелах типа df = pd.DataFrame({'b':['e','e',' ', ''],'c':['e','f','g', 'h']}), проверьте это на (df.drop_duplicates('b', keep=False)) - person jezrael; 08.11.2017
comment
Мой идеальный результат - удалить дубликаты столбца C, а также удалить строки данных рядом с ним, чтобы данные были красивыми, аккуратными и удобными для использования. Это ведет себя не так, как мне бы хотелось. - person ; 08.11.2017
comment
Удалена целая колонка. Это действительно очень странно. - person ; 08.11.2017
comment
Он проверяет только столбец C, тогда для функции drop_duplicates другие столбцы не имеют значения, поэтому кажется, что нужно какое-то сложное решение, а не только drop_duplicatates - person jezrael; 08.11.2017
comment
Что-то вроде: df.append([df_try]*5,ignore_index=True) для добавления данных для столбца C в начало строки, чтобы не было пробелов, а также a.loc[a.shift(-1) != a] для удаления соседние дубликаты строк удалены для столбца C. Пока не работает, но я знаю, что это можно сделать. - person ; 08.11.2017
comment
Не уверен, понял ли ты, можешь ли ты изменить df = pd.DataFrame({'b':['e','e',' ', ''],'c':['e','f','g', 'h']}) о чем ты говоришь? И можете ли вы добавить желаемый результат? - person jezrael; 08.11.2017
comment
Я могу лучше, я могу показать вам, что я вижу - ibb.co/jEQjSb - person ; 08.11.2017
comment
Итак, каков желаемый результат? Не уверен, что понял. - person jezrael; 08.11.2017
comment
Как правило, это то, чего я пытаюсь достичь - ibb.co/f08Dnb . Цель состоит в том, чтобы удалить дубликаты в столбце D + Rows, чтобы они выглядели как на изображении. - person ; 08.11.2017
comment
Так нужно только forst дублированное значение? Тогда нужно только (df.drop_duplicates('b', keep='first')) или (df.drop_duplicates('b')) что одинаково. При необходимости сохраните последнее значение (df.drop_duplicates('b', keep='last')) - person jezrael; 08.11.2017
comment
Данные довольно большие, и в этом столбце много дубликатов. Итак, я хочу удалить все дубликаты в столбце D и соседних строках, как показано на изображении. - person ; 08.11.2017
comment
Да, так что df = df.drop_duplicates(subset=[df.columns[2]]) должно работать отлично. - person jezrael; 08.11.2017
comment
В данном случае меня интересует столбец 4 или D. Это оказалось правильным. Я не уверен, почему, хотя это для столбца 3, не так ли? Я попробую это с другими данными и посмотрю. - person ; 08.11.2017
comment
Оказывается, даже недавно созданные файлы Excel могут быть легко повреждены. Я предполагаю, что это происходит, когда вы запускаете на них много разного кода Python. Спасибо за вашу помощь. Я должен был отправить тебе файл раньше, но все хорошо кончается. - person ; 08.11.2017
comment
Кажется, он удаляет все дубликаты, кроме 2. Интересно, почему это так. - person ; 09.11.2017