pythonic 方法来计算列表/集合中的单词在数据框列中出现的次数
pythonic way to count the number of times words from a list / set occur in a dataframe column
给定一个列表/一组标签
labels = {'rectangle', 'square', 'triangle', 'cube'}
和一个数据框 df,
df = pd.DataFrame(['rectangle rectangle in my square cube', 'triangle circle not here', 'nothing here'], columns=['text'])
我想知道我的标签集中的每个单词在数据框的文本列中出现了多少次,并创建一个新列,其中包含前 X 个(可能是 2 或 3 个)重复次数最多的单词。如果 2 个单词的重复次数相同,那么它们可以出现在列表或字符串中
输出:
pd.DataFrame({'text' : ['rectangle rectangle in my square cube', 'triangle circle not here', 'nothing here'], 'best_labels' : [{'rectangle' : 2, 'square' : 1, 'cube' : 1}, {'triangle' : 1, 'circle' : 1}, np.nan]})
df['best_labels'] = some_function(df.text)
from collections import Counter
labels = {'rectangle', 'square', 'triangle', 'cube'}
df = pd.DataFrame(['rectangle rectangle in my square cube', 'triangle circle not here', 'nothing here'], columns=['text'])
df['best_labels'] = df.text.apply(lambda x: {k: v for k, v in Counter(x.split()).items() if k in labels} or np.nan)
print(df)
打印:
text best_labels
0 rectangle rectangle in my square cube {'rectangle': 2, 'square': 1, 'cube': 1}
1 triangle circle not here {'triangle': 1}
2 nothing here NaN
另一种可视化数据的方法是使用矩阵:
(df['text'].str.extractall(r'\b({})\b'.format('|'.join(labels)))
.groupby(level=0)[0]
.value_counts()
.unstack()
.reindex(df.index)
.rename_axis(None, axis=1))
cube rectangle square triangle
0 1.0 2.0 1.0 NaN
1 NaN NaN NaN 1.0
2 NaN NaN NaN NaN
想法是从 labels
中指定的行中提取文本,然后找出它们在每个句子中出现的次数。
这看起来像什么?是的,你猜对了,稀疏矩阵。
给定一个列表/一组标签
labels = {'rectangle', 'square', 'triangle', 'cube'}
和一个数据框 df,
df = pd.DataFrame(['rectangle rectangle in my square cube', 'triangle circle not here', 'nothing here'], columns=['text'])
我想知道我的标签集中的每个单词在数据框的文本列中出现了多少次,并创建一个新列,其中包含前 X 个(可能是 2 或 3 个)重复次数最多的单词。如果 2 个单词的重复次数相同,那么它们可以出现在列表或字符串中
输出:
pd.DataFrame({'text' : ['rectangle rectangle in my square cube', 'triangle circle not here', 'nothing here'], 'best_labels' : [{'rectangle' : 2, 'square' : 1, 'cube' : 1}, {'triangle' : 1, 'circle' : 1}, np.nan]})
df['best_labels'] = some_function(df.text)
from collections import Counter
labels = {'rectangle', 'square', 'triangle', 'cube'}
df = pd.DataFrame(['rectangle rectangle in my square cube', 'triangle circle not here', 'nothing here'], columns=['text'])
df['best_labels'] = df.text.apply(lambda x: {k: v for k, v in Counter(x.split()).items() if k in labels} or np.nan)
print(df)
打印:
text best_labels
0 rectangle rectangle in my square cube {'rectangle': 2, 'square': 1, 'cube': 1}
1 triangle circle not here {'triangle': 1}
2 nothing here NaN
另一种可视化数据的方法是使用矩阵:
(df['text'].str.extractall(r'\b({})\b'.format('|'.join(labels)))
.groupby(level=0)[0]
.value_counts()
.unstack()
.reindex(df.index)
.rename_axis(None, axis=1))
cube rectangle square triangle
0 1.0 2.0 1.0 NaN
1 NaN NaN NaN 1.0
2 NaN NaN NaN NaN
想法是从 labels
中指定的行中提取文本,然后找出它们在每个句子中出现的次数。
这看起来像什么?是的,你猜对了,稀疏矩阵。