それぞれの行のワード数を含むデータフレームに新しい列を作成しようとしています。各単語の頻度ではなく、単語の総数に注目しています。この一般的なタスクを実行する簡単な方法があると想定しましたが、グーグルでいくつかのSO投稿(- 1 、 2 、、 4 )私は立ち往生しています。リンクされたSOの投稿で提案されたソリューションを試しました、しかし多くの属性エラーを取り戻します。
words = df['col'].split()
df['totalwords'] = len(words)
結果として
AttributeError: 'Series' object has no attribute 'split'
そして
f = lambda x: len(x["col"].split()) -1
df['totalwords'] = df.apply(f, axis=1)
結果として
AttributeError: ("'list' object has no attribute 'split'", 'occurred at index 0')
str.split
+ str.len
str.len
は、数値以外の列に対して適切に機能します。
df['totalwords'] = df['col'].str.split().str.len()
str.count
単語が単一のスペースで区切られている場合は、スペースに1を足した数を数えるだけです。
df['totalwords'] = df['col'].str.count(' ') + 1
これは思ったよりも速いです!
df['totalwords'] = [len(x.split()) for x in df['col'].tolist()]
.apply()
を使用する方法は次のとおりです。
_df['number_of_words'] = df.col.apply(lambda x: len(x.split()))
_
example
このdf
を考えると:
_>>> df
col
0 This is one sentence
1 and another
_
.apply()
を適用した後
_df['number_of_words'] = df.col.apply(lambda x: len(x.split()))
>>> df
col number_of_words
0 This is one sentence 4
1 and another 2
_
注:コメントおよび この回答 で指摘されているように、_.apply
_は必ずしも最速の方法ではありません。速度が重要な場合は、 @cᴏʟᴅsᴘᴇᴇᴅ's メソッドのいずれかを使用することをお勧めします。
これは pd.Series.str.split
および pd.Series.map
:
df['Word_count'] = df['col'].str.split().map(len)
上記では、df['col']
は一連の文字列です。
例:
df = pd.DataFrame({'col': ['This is an example', 'This is another', 'A third']})
df['Word_count'] = df['col'].str.split().map(len)
print(df)
# col Word_count
# 0 This is an example 4
# 1 This is another 3
# 2 A third 2
コールドからのlist
およびmap
データ
list(map(lambda x : len(x.split()),df.col))
Out[343]: [4, 3, 2]
`df ['count_words'] = df ['Tweet']。apply(lambda x:len(x.split()))
df ['count_words']。head(10)
「Twitter感情分析を行っていましたが、うまくいきました。