[Похожие сообщения] [1]Удаление повторяющихся строк
У меня есть табуляции таблицы и я пытаюсь выяснить способ для удаления повторяющихся записей. Вот некоторые выдуманные данные, которые имеют ту же форму, что и данные в таблице:
name phone email website
Diane Grant Albrecht M.S.
"Lannister G. Cersei M.A.T., CEP" 111-222-3333 [email protected] www.got.com
Argle D. Bargle Ed.M.
Sam D. Man Ed.M. 000-000-1111 [email protected] www.daManWithThePlan.com
Sam D. Man Ed.M.
Sam D. Man Ed.M. 111-222-333 [email protected] www.daManWithThePlan.com
D G Bamf M.S.
Amy Tramy Lamy Ph.D.
Я хотел бы иметь повторяющиеся строки для Sam D. Человек слившихся в один, который удерживает два телефонных номера, но Безразлично» t хранят два одинаковых адреса электронной почты и два одинаковых веб-сайта.
Способ, которым я думал об этом, состоял в том, чтобы сохранить предыдущую строку и сравнить имена. Если имена совпадают, сравните номера телефонов. Если номера телефонов не совпадают, добавьте их в первую строку. Затем сравните электронные письма. Если письма не совпадают, добавьте в первую строку. А затем сравните сайты. Если веб-сайты не совпадают, добавьте второй веб-сайт в первую очередь. Затем удалите вторую строку.
- Я не знаю, как удалить строку. Остальные сообщения, похоже, вообще не удаляют строки, записывая строки в новый файл. Но я думаю, что это проблематично для моего случая, потому что я не хочу писать строки с одинаковыми именами дважды.
- Есть ли более эффективные средства для петли? Вложенные для петель занимают некоторое время.
- И я могу видеть, что я бегу в вопросы, с индексацией сверх лимита ...
Вот мой код:
with(open('ieca_first_col_fake_text.txt', 'rU')) as f:
sheet = csv.DictReader(f, delimiter = '\t')
# This function takes a tab-delim csv and merges the ones with the same name but different phone/email/websites.
def merge_duplicates(sheet):
# Since duplicates immediately follow, store adjacent and compare. If the same name, append phone number
for row in sheet:
for other_row in sheet:
if row['name'] == other_row['name']:
if row['email'] != other_row['email']:
row['email'].append(other_row['email'])
if row['website'] != other_row['website']:
row['website'].append(other_row['website'])
# code to remove duplicate row
# delete.() or something...
merge_duplicates(sheet)
Я думаю, что вам захочется сохранить результаты вашего слияния где-нибудь (либо в другом файле, либо временно в памяти, в зависимости от того, сколько данных вы работаете), в противном случае вы будете удалять строки из файла, который вы «повторение», которое обычно считается «нет-нет». – erewok
Хорошо, так что доходит до того, о чем я говорил. Что происходит, когда я повторяю примерную таблицу и добираюсь до второго экземпляра Сэм Д. Ман? – goldisfine
Рассматривали ли вы использование «Панд». В вашей проблеме много решений. – LonelySoul