我正在处理twitter的数据,并从这些数据中提取每个表情符号。但是,当我通过CountVectorizer
传递数据时,从字符串中减去的冒号。因此,字符串表情符号:ok_hand: :thumbs_up:
变成了ok_hand thumbs_up
。我想重新添加这些结肠,这样我就可以把它们表情化了。我设法做到了,但我确信我的方法效率很低。表情符号是系数DataFrame的索引,如下所示:
index coef
ok_hand thumbs_up 0.4
airplane 0.2
所以我做的是:
to_emojize=pd.Series(coef_mat_emoji.index)
to_emojize=to_emojize.apply(lambda x: x.split())
to_emojize=to_emojize.apply(lambda x:[':'+i+':' for i in x])
to_emojize=to_emojize.apply(lambda x: emoji.emojize(x, use_aliases=True))
coef_mat_emoji.index=to_emojize
有更好的方法吗?
发布于 2019-04-17 09:21:32
pandas.Series
和pandas.Index
都有向量化的字符串添加。你可以这样做:
to_emojize = pd.Series(":" + coef_mat_emoji.index + ":")
coef_mat_emoji.index = to_emojize.apply(emoji.emojize, use_aliases=True)
请注意,pandas.Series.apply
将任何附加的关键字参数传递给函数,因此这里根本不需要lambda
。
这将从第一个加法中创建一个中间系列,这可能不是最有效的内存方法。但是它是最简单和最易读的,所以除非你用这个耗尽内存,否则这就是我要用的。
或者,您可以将其全部放入一个apply
调用中(Python 3.6+表示f-string
s):
coef_mat_emoji.index = pd.Series(coef_mat_emoji.index).apply(
lambda x: emoji.emojize(f":{x}:", use_aliases=True))
你必须用你的实际数据来计时,看看这是否更快。无论如何,对emoji.emojize
的呼吁可能会占主导地位。
https://codereview.stackexchange.com/questions/217565
复制相似问题