2016-06-30 7 views
0

パンダのデータフレームで収集されたコメントのリストを調べ、それらの単語をトークン化してデータフレームの新しい列に入れようとしていますが、これにより、パンダのデータフレームの新しい列に単語をトークン化する

は誤りであることはAttributeErrorを述べている:「ユニコード」オブジェクトが持つ無属性「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 

答えて

0

lambda関数を適用するというあなたの方法は、それはあなたが動作しないaddwordsを定義する方法である、正しいです。あなたがapwordsを定義するとき、あなたがそれを適用したいとき

あなたはそのためfunctionないattributeを定義し、使用:

addwords = lambda x: apwords(x) 

そしてません:あなたはとしてapwordsを使用したい場合は

addwords = lambda x: x.apwords() 

属性がstringから継承し、このクラスの属性としてapwordsを定義すると、classを定義する必要があります。

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) 
+0

私はあなたとジョアン・アルメイダが提案何をしてみましたが、私は例外TypeError取得しています:

functionで滞在する方がはるかに簡単で、期待される文字列を、オンラインまたはバッファであるので、あなたが私言ったように文字列から継承して元のメソッドを行うクラスを定義する必要がありますか?ありがとう – user3655574

+0

いいえ、あなたの 'df ['complaints']'に文字列以外のものがあることを意味する必要があります。 'df.dtypes'を使うと、' object'という型を 'complaints'の前に置く必要がありますか? 'addwords'型 'df ['complaints'] = df ['complaints']を適用する前に、欠損値(文字列ではない)がある可能性が最も高いと思います。fillna( '')空の文字列で値を返します。 – ysearka

0

あなたはこれを行うにはしたくない:

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

あなたが機能addwordsを定義する必要はありません。どのように定義する必要があります。

addwords = lambda x: apwords(x) 
関連する問題