首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将频率字典转换为频率矩阵

将频率字典转换为频率矩阵
EN

Stack Overflow用户
提问于 2021-01-31 21:51:14
回答 1查看 30关注 0票数 1

我想把频率字典转换成频率矩阵。我有以下代码:

代码语言:javascript
复制
words = {
  "file1.txt" : tf2[0],
  "file2.txt" : tf2[1],
  "file3.txt" : tf2[2],
}



matrix = []
for line in words:
   line = line.strip("\n")
   a = line.split(";")
   for i in range(len(a)):
      try:
        a[i] = float(a[i])
      except ValueError:
        pass
        matrix.append(a)
print(matrix)

for行部分似乎没有将tf2等作为字典的一部分。我不知道该怎么解决这个问题。dic当前打印的单词:

代码语言:javascript
复制
{'file1.txt': {'eye': 1, 'head': 1, 'leg': 1}, 'file2.txt': {'eye': 1, 'head': 1}, 'file3.txt': {'eye': 1, 'leg': 2, 'foot':1}}

我希望它变成这样(最好是在floats中):

代码语言:javascript
复制
[['', 'file1.txt', 'file2.txt', 'file3.txt'],
['leg', 1, 0, 2],
['eye', 1, 1, 1],
['head', 1, 1, 0],
['foot', 0, 0, 1]]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-31 22:10:37

我将首先将字典转换为数据帧。

代码语言:javascript
复制
d = {'file1.txt': {'eye': 1, 'head': 1, 'leg': 1}, 'file2.txt': {'eye': 1, 'head': 1}, 'file3.txt': {'eye': 1, 'leg': 2, 'foot':1}}
import pandas as pd
df = pd.DataFrame(d)
df

这几乎产生了您想要的结果:

代码语言:javascript
复制
            file1.txt   file2.txt   file3.txt
eye         1.0         1.0         1.0
head        1.0         1.0         NaN
leg         1.0         NaN         2.0
foot        NaN         NaN         1.0

然后,我们以双列表的形式提取所有数据--这里的要点是,我们还希望在其中包含索引和列名,因此,通过转置T并用0替换NaNs,可以将reset_index内容放在一起

代码语言:javascript
复制
(df.fillna(0)
   .astype(int)
   .rename_axis('')
   .reset_index()
   .T
   .reset_index()
   .T
   .values.tolist()
)

产生

代码语言:javascript
复制
[['', 'file1.txt', 'file2.txt', 'file3.txt'],
 ['eye', 1, 1, 1],
 ['head', 1, 1, 0],
 ['leg', 1, 0, 2],
 ['foot', 0, 0, 1]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65979868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档