将矩阵市场矩阵转换为熊猫数据框python

Sil*_*Sil 1 python text-analysis dataframe pandas

我有一个市场矩阵文件,我必须用它来进行文本分析。

市场文件具有以下结构:

%%MatrixMarket matrix coordinate integer general
2000 5000 23000
1 4300 1
1 2200 1
1 3000 1
1 600  1
Run Code Online (Sandbox Code Playgroud)

第二行中的值表示矩阵中的行数、列数和非零值的总数。此后的所有行都包含 3 个值:

  • 行(从 1 开始索引),代表我的文本文档;
  • 列(索引从 1),代表一个词;
  • 词频。

正如在许多帖子中阅读的那样,我阅读了这个文件,使用 scipy.io.mmread 和处理解析数据结构的新 API。

特别是,我使用了以下代码:

    Matrix = (mmread('file_name.mtx'))
    B = Matrix.todense()
    df = pd.DataFrame(B)
    print(df.head())
Run Code Online (Sandbox Code Playgroud)

但是,从这段代码中,我得到了一个从 0 索引的数据框:

        0     1     2     3     4     5     6     7     8     9     ...   4872  \
0     1     0     1     0     0     0     0     0     1     0  ...      0   
1     0     0     0     0     0     0     0     0     0     0  ...      0   
2     0     0     0     0     0     0     0     0     0     0  ...      0   
3     1     0     1     0     0     0     0     0     1     0  ...      0   
4     0     0     1     0     0     0     0     0     0     0  ...      0  
Run Code Online (Sandbox Code Playgroud)

理想的结果是保留原始市场矩阵的格式,行和列从 1 开始索引。

任何想法如何更正我的代码?

谢谢!

piR*_*red 5

您可以为数据框指定索引和列

Matrix = (mmread('file_name.mtx'))
B = Matrix.todense()
df = pd.DataFrame(B, range(1, B.shape[0] + 1), range(1, B.shape[1] + 1))
print(df.iloc[:5, :5])

   1  2  3  4  5
1  0  0  0  0  0
2  0  0  0  0  0
3  0  0  0  0  0
4  0  0  0  0  0
5  0  0  0  0  0
Run Code Online (Sandbox Code Playgroud)