我正在尝试在数据框中创建一个新列,其中包含相应行的字数。我正在寻找单词的总数,而不是每个不同单词的频率。我假设有一种简单/快捷的方式来完成这项常见任务,但是在谷歌搜索并阅读了一些SO帖子后1,2,3,{{3}我被困住了。我已经尝试过在链接的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')
答案 0 :(得分:13)
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()]
答案 1 :(得分:8)
以下是使用.apply()
的方法:
df['number_of_words'] = df.col.apply(lambda x: len(x.split()))
示例强>
鉴于此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
注意:正如评论中所指出的那样,在this answer中,.apply
不一定是最快的方法。如果速度很重要,最好使用@cᴏʟᴅsᴘᴇᴇᴅ's方法之一。
答案 2 :(得分:5)
这是使用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
答案 3 :(得分:4)
来自寒冷的list
和map
数据
list(map(lambda x : len(x.split()),df.col))
Out[343]: [4, 3, 2]
答案 4 :(得分:0)
`df ['count_words'] = df ['tweet']。apply(lambda x:len(x.split()))
df ['count_words']。head(10)
`我正在进行Twitter情绪分析,对我来说效果很好。