(Python) pandas .DataFrame не обновляет значение каждый цикл -1 oop, почему? - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок в Pandas DataFrame и мне было любопытно, почему мои базовые c мысли о добавлении новых значений в новую строку здесь не работают.

Я также пытался использовать разные способы с .loc [], .append (), но якобы использовал их некорректно (все еще надо учиться).

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

  • Если число> 10, частота "частая".
  • Если 1 <количество <= 10 , частота "нечастая". </li>
  • Если число == 1, частота "уникальна".

    Моя запись предложений if для всех DataFrame только по последнему значению словаря, как объект ( Счетчик от панд / numpy?). Все слова и значения счетчиков возвращаются в течение цикла, поэтому я не понимаю, почему DataFrame не может добавлять значения каждый цикл

    data['length'] = ''
    data['frequency'] = ''
    
    for word, count in counted_text.items():
        if count > 10:
            data.length = len(word)
            data.frequency = 'frequent'
        if 1 < count <=10:
            data.length = len(word)
            data.frequency = 'infrequent'
        if count == 1:
            data.length = len(word)
            data.frequency = 'unique'
    print(word, len(word), '\n')
    
    """
    This is working code that I googled
    -----------------------------------
    data = pd.DataFrame({
        "word": list(counted_text.keys()),
        "count": list(counted_text.values())
    })
    
    data["length"] = data["word"].apply(len)
    
    data.loc[data["count"] > 10,  "frequency"] = "frequent"
    data.loc[data["count"] <= 10, "frequency"] = "infrequent"
    data.loc[data["count"] == 1,  "frequency"] = "unique"
    
    """
    
    print(data.head(), '\n')
    print(data.tail())
    

Вывод:

finis 5 

       word  count  length frequency
1       the    935       5    unique
2  tragedie      3       5    unique
3        of    576       5    unique
4    hamlet     97       5    unique
5            45513       5    unique 

              word count  length frequency
5109  shooteexeunt     1       5    unique
5110      marching     1       5    unique
5111         peale     1       5    unique
5112           ord     1       5    unique
5113         finis     1       5    unique

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Если у вас есть только word и count в кадре данных data и что count не будет иметь значения 0, вы можете попробовать следующее -

import numpy as np
data['length'] = data['word'].str.len()
data['frequency'] = np.where(data['count'] > 10, 'frequent',\
                             np.where((data['count'] > 1) & (data['count'] <= 10),\
                             'infrequent', 'unique')) 
0 голосов
/ 21 апреля 2020

После того, как @Sajan дал верный код, я пришел к выводу, что DataFrame вообще не нужен для -l oop.

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