【问题标题】:Tokenizing words into a new column in a pandas dataframe将单词标记为 pandas 数据框中的新列
【发布时间】:2016-11-02 08:42:53
【问题描述】:

我正在尝试查看在 pandas 数据框中收集的 cmets 列表,并对这些单词进行标记并将这些单词放在数据框中的新列中,但我遇到了一个错误,是

错误说明 AttributeError: 'unicode' object has no attribute 'apwords'

还有其他方法可以做到这一点吗?谢谢

def apwords(words):
    filtered_sentence = []
    words = word_tokenize(words)
    for w in words:
        filtered_sentence.append(w)
    return filtered_sentence
addwords = lambda x: x.apwords()
df['words'] = df['complaint'].apply(addwords)
print df

【问题讨论】:

    标签: python pandas dataframe nltk


    【解决方案1】:

    你不想这样做吗:

       df['words'] = df['complaint'].apply(apwords)
    

    您不需要定义函数addwords。应该定义为:

    addwords = lambda x: apwords(x)
    

    【讨论】:

      【解决方案2】:

      您应用lambda 函数的方式是正确的,这是您定义addwords 的方式不起作用。

      当您定义apwords 时,您定义的是function 而不是attribute,因此当您想应用它时,请使用:

      addwords = lambda x: apwords(x)
      

      而不是:

      addwords = lambda x: x.apwords()
      

      如果要将apwords 用作属性,则需要定义一个继承自stringclass,并将apwords 定义为此类中的属性。

      使用function 会容易得多:

      def apwords(words):
          filtered_sentence = []
          words = word_tokenize(words)
          for w in words:
              filtered_sentence.append(w)
          return filtered_sentence
      addwords = lambda x: apwords(x)
      df['words'] = df['complaint'].apply(addwords)
      

      【讨论】:

      • 我尝试按照您和 João Almeida 的建议进行操作,但我得到一个 TypeError: expected string or buffer now,是因为就像您说的那样,我必须定义一个从字符串继承的类并执行我原来的方法?谢谢
      • 不,这一定意味着在您的df['complaints'] 中,您拥有的不是字符串。如果你使用df.dtypes,你必须在complaints前面输入object,不是吗?我认为,最有可能是您缺少值(不是字符串),然后在应用 addwords 之前输入 df['complaints'] = df['complaints'].fillna('') 以用空字符串替换 nan 值。
      • @ysearka ,你能扭曲这段代码来提取一个包含特定单词的句子吗?
      • 你这是什么意思?你能描述一下你拥有的输入和你想要的输出吗?这样会更容易理解和回答。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2019-12-17
      • 2022-12-10
      相关资源
      最近更新 更多