将频率字典转化为频率矩阵

时间:2021-01-31 13:51:13

标签: python

我想把一个频率字典变成一个频率矩阵。 我有以下代码:

"strconv.Atoi: parsing "2\r\n": invalid syntax

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

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)

我希望它变成这样(最好是花车):

{'file1.txt': {'eye': 1, 'head': 1, 'leg': 1}, 'file2.txt': {'eye': 1, 'head': 1}, 'file3.txt': {'eye': 1, 'leg': 2, 'foot':1}}

1 个答案:

答案 0 :(得分:1)

我首先将字典转换为数据框

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

这几乎产生了你想要的:


            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

然后我们将所有数据提取为一个双列表——这里的要点是我们希望索引和列名也包含在其中,因此 reset_index 与转置 T 一起,并替换带有 0 的 NaN

(df.fillna(0)
   .astype(int)
   .rename_axis('')
   .reset_index()
   .T
   .reset_index()
   .T
   .values.tolist()
)

生产


[['', 'file1.txt', 'file2.txt', 'file3.txt'],
 ['eye', 1, 1, 1],
 ['head', 1, 1, 0],
 ['leg', 1, 0, 2],
 ['foot', 0, 0, 1]]
相关问题