我使用文本挖掘从各种文档中捕获单词计数。在这样做的过程中,我在文本中搜索给定的单词列表。示例:数据、数字&wifi
我的代码输出一个字典,结果是匹配的单词(键)和计数(值)。例子:
txt_file_1: {'data': 2, 'digital': 1}
txt_file_2: {'data': 3}
现在,我想通过列出我在第一列中搜索的所有单词,将其转移到一个数据帧中。其他列应该输出txt_file和相应的匹配作为标题(见下表)。
我的问题是:如何将字典中的键与第一列中的相关条目匹配,以便值最终正确?
pd.Series
与字典非常相似。它有一个索引(字典键)和每个键的值。
在这个解决方案中,我们在处理Series和dataframe时使用了这些关于Series和pandas自动索引对齐的基本事实。我们只生产具有正确索引的系列,它们自然地组合在一起。
DataFrame就像一个并排的系列,每一列。
# given
txt_file_1 = {'data': 2, 'digital': 1}
txt_file_2 = {'data': 3}
# input dictionaries with names
inputs = [("file1", txt_file_1), ("file2", txt_file_2)]
words = ['data', 'digital', 'wifi']
# concatenate together the columns. It merges the indexes automatically
# But then we align the dataframe to the known word list.
df = pd.concat([pd.Series(item, name=name) for name, item in inputs], axis="columns")
df = df.reindex(words).fillna(0).astype('int')
df
file1 file2
data 2 3
digital 1 0
wifi 0 0
注意,如果缺少单词,.reindex()
会扩展DataFrame,但是如果每列中都有不在单词列表中的单词,它也会丢失行。您可以使用其他代码执行联合,或者在继续之前检查此错误。
在制作系列时已经有使用pd.Series(item, name=name, index=words)
的选项。这样就不需要重新索引了。我认为唯一的缺点是,您无法看到字典中索引以外的单词,但如果您已经通过构造知道了这一点,那么它就没有问题。