我想把一个频率字典变成一个频率矩阵。 我有以下代码:
"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}}
答案 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]]