Как удалить повторяющиеся слова в CSV строки в Python? - PullRequest
1 голос
/ 27 мая 2019

Я работаю с CSV-файлом, и у меня есть много строк, которые содержат повторяющиеся слова, и я хочу удалить все дубликаты (я также не хочу терять порядок предложений).

Пример файла CSV (ИД пользователя и описание - это имя столбца):

userID, description

12, hello world hello world

13, I will keep the 2000 followers same I will keep the 2000 followers same

14, I paid $2000 to the car I paid $2000 to the car I paid $2000 to the car

.

.

Я хотел бы получить вывод:

userID, description

12, hello world 

13, I will keep the 2000 followers same

14, I paid $2000 to the car 

.

.

Я уже пробовал пост, такой как 1 2 3 , но никто из них не исправил мою проблему и ничего не изменил. (Заказ для моего выходного файла имеет значение, так как я не хочу терять заказы). Было бы здорово, если бы вы могли предоставить свою помощь с примером кода, который я могу запустить и изучить. Спасибо

[Я использую версию Python 3.7]

Ответы [ 3 ]

0 голосов
/ 28 мая 2019

Решение взято из здесь :

def principal_period(s):
    i = (s+s).find(s, 1)
    return s[:i]

df['description'].apply(principal_period)

Вывод:

0                                 hello world
1     I will keep the 2000 followers the same
2                     I paid $2000 to the car
Name: description, dtype: object

Так как для строки используется apply, она может быть медленной.

0 голосов
/ 30 мая 2019

Ответ взят из Как узнать, повторяется ли строка в Python?

import pandas as pd
def principal_period(s):
    s+=' '
    i = (s + s).find(s, 1, -1)
    return None if i == -1 else s[:i]
df=pd.read_csv(r'path\to\filename_in.csv')
df['description'].apply(principal_period)
df.to_csv(r'output\path\filename_out.csv')

Объяснение:

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

0 голосов
/ 27 мая 2019

Код ниже работает для меня:

a = pd.Series(["hello world hello world", 
               "I will keep the 2000 followers same I will keep the 2000 followers same",
               "I paid $2000 to the car I paid $2000 to the car I paid $2000 to the car"])
a.apply(lambda x: " ".join([w for i, w in enumerate(x.split()) if x.split().index(w) == i]))

По сути, идея заключается в том, чтобы сохранять для каждого слова только то, что его позиция является первой в списке (отделяется от строки, используя пробел).Это означает, что если слово встречалось во второй (или более) раз, функция .index() вернет индекс, меньший, чем позиция текущего вхождения, и, таким образом, будет исключена.

Это даст вам:

0                            hello world
1    I will keep the 2000 followers same
2                I paid $2000 to the car
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...