如何将dict键与数据框列项匹配以插入值



我使用文本挖掘从各种文档中捕获单词计数。在这样做的过程中,我在文本中搜索给定的单词列表。示例:数据、数字&wifi

我的代码输出一个字典,结果是匹配的单词(键)和计数(值)。例子:

txt_file_1: {'data': 2, 'digital': 1}
txt_file_2: {'data': 3}

现在,我想通过列出我在第一列中搜索的所有单词,将其转移到一个数据帧中。其他列应该输出txt_file和相应的匹配作为标题(见下表)。

我的问题是:如何将字典中的键与第一列中的相关条目匹配,以便值最终正确?

<表类>字txt_file_1txt_file_2tbody><<tr>数据23数字10wifi00

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)的选项。这样就不需要重新索引了。我认为唯一的缺点是,您无法看到字典中索引以外的单词,但如果您已经通过构造知道了这一点,那么它就没有问题。

最新更新