web-dev-qa-db-ja.com

行ごとの単語数を数える

それぞれの行のワード数を含むデータフレームに新しい列を作成しようとしています。各単語の頻度ではなく、単語の総数に注目しています。この一般的なタスクを実行する簡単な方法があると想定しましたが、グーグルでいくつかのSO投稿(- 12 、、 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')
12
LMGagne

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()]
16
cs95

.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 メソッドのいずれかを使用することをお勧めします。

8
sacuL

これは 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
5
jpp

コールドからのlistおよびmapデータ

list(map(lambda x : len(x.split()),df.col))
Out[343]: [4, 3, 2]
4
WeNYoBen

`df ['count_words'] = df ['Tweet']。apply(lambda x:len(x.split()))

df ['count_words']。head(10)

「Twitter感情分析を行っていましたが、うまくいきました。

0
valkyrie55