Как удалить дубликаты в частотной таблице? - PullRequest
0 голосов
/ 16 октября 2019

Я новичок в кодировании и создал код, который подсчитывает частоту слов, а затем помещает в таблицу пакет panda, но мне нужно удалить произведенные дубликаты.

Я следовал онлайн-урокам, как удалять дубликаты, но текущий код все еще не работает, как видно из второго ввода. Любая обратная связь с благодарностью.

ВХОД

  txt = "chilli mango chilli mango grape"
  words = txt.split()
  for word in words:
        print(word + " " + str(txt.count(word)))
  import pandas as pd
  mytable = pd.DataFrame()
  for word in words:
        tempdf = pd.DataFrame({"word" : [word], "frequency" : [txt.count(word)]})
        mytable = mytable.append(tempdf)
        print(mytable)

ВЫХОД

 chilli 2
 mango 2
 chilli 2
 mango 2
 grape 1

 word  frequency
 0  chilli          2
 word  frequency
 0  chilli          2
 0   mango          2
 word  frequency
 0  chilli          2
 0   mango          2
 0  chilli          2
 word  frequency
 0  chilli          2
 0   mango          2
 0  chilli          2
 0   mango          2
 word  frequency
 0  chilli          2
 0   mango          2
 0  chilli          2
 0   mango          2
 0   grape          1

ВХОД

data = mytable
data.sort_values("First name", inplace = True)
data.drop_duplicates(subset = "First name", 
                 keep = False, inplace = True)
print(data)

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы можете сделать dict:

dct = {}
for word in txt.split():
    if word not in dct:
        dct[word] = 1
    else:
        dct[word] += 1

frequency = pd.Series(dct)

или pandas способом:

frequency = pd.Series(txt.split()).value_counts()
0 голосов
/ 16 октября 2019

collections.Counter также предназначен для этого типа задач и может быть легко преобразован в фрейм данных pandas.

from collections import Counter
txt = "chilli mango chilli mango grape"
words = txt.split()
counts = Counter(words)  # Counter({'chilli': 2, 'grape': 1, 'mango': 2})
df = pd.DataFrame(counts.items(), columns=["Word", "Frequency"])  # same data as a dataframe

Вы также можете создать фрейм данных, чтобы избежать создания дубликатов:

mytable = pd.DataFrame(columns=["word", "frequency"]).set_index("word")
for word in words:
    if word in mytable.index:
        mytable.loc[word] += 1
    else:
        mytable.loc[word] = 1

Сказав, что ваш существующий код должен действительно работать, если вы отбросите keep = False (что говорит об удалении всех дубликатов, включая первую копию) и измените "First name" на "word".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...