我想把频率字典转换成频率矩阵。我有以下代码:
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当前打印的单词:
{'file1.txt': {'eye': 1, 'head': 1, 'leg': 1}, 'file2.txt': {'eye': 1, 'head': 1}, 'file3.txt': {'eye': 1, 'leg': 2, 'foot':1}}我希望它变成这样(最好是在floats中):
[['', 'file1.txt', 'file2.txt', 'file3.txt'],
['leg', 1, 0, 2],
['eye', 1, 1, 1],
['head', 1, 1, 0],
['foot', 0, 0, 1]]发布于 2021-01-31 22:10:37
我将首先将字典转换为数据帧。
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然后,我们以双列表的形式提取所有数据--这里的要点是,我们还希望在其中包含索引和列名,因此,通过转置T并用0替换NaNs,可以将reset_index内容放在一起
(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]]https://stackoverflow.com/questions/65979868
复制相似问题