【问题标题】:How to save and read matrices with pandas如何使用 pandas 保存和读取矩阵
【发布时间】:2022-11-23 23:31:45
【问题描述】:
我正在尝试使用 pd.to_csv 命令保存和读取不同大小的矩阵。问题是 pandas 以字符串形式保存矩阵,因此当我读取 CSV 文件时,我不会以数字形式检索矩阵。
import numpy as np
import pandas as pd
L = []
for Dim in range(3,10):
L.append(np.random.randint(1,10, (Dim,Dim)))
df = pd.DataFrame(L)
df
df.to_csv("matrices.csv", index=False)
read_matrices = pd.read_csv("matrices.csv")
read_matrices
read_matrices 的每一行都是一个字符串,我希望它们是数字矩阵(ndarray 或 pdseries)。
估计和我保存数据的方式有关,我试了pd.to_csv()的所有选项都没有结果。有任何想法吗 ?
【问题讨论】:
标签:
python
pandas
csv
save
read.csv
【解决方案1】:
在完成append时出现,可能是“vector”对象被转换为“simple”。因此,我立即将生成的 numpy 数组转换为数据帧,然后将其添加到所需的数据帧中。对于数据类型,我使用了experimental type,因为 pandas 的空单元格被 nan 填充,并且这些列中的整数变成了浮点数。
import numpy as np
import pandas as pd
df = pd.DataFrame(dtype=pd.Int64Dtype())
for Dim in range(3, 10):
l = np.random.randint(1, 10, (Dim, Dim))
dfl = pd.DataFrame(l, dtype=pd.Int64Dtype())
df = pd.concat([df, dfl])
df.to_csv("matrices.csv")
read_matrices = pd.read_csv("matrices.csv", dtype=pd.Int64Dtype())
print(read_matrices)
-------------------------------------
Unnamed: 0 0 1 2 3 4 5 6 7 8
0 0 7 3 4 <NA> <NA> <NA> <NA> <NA> <NA>
1 1 5 2 6 <NA> <NA> <NA> <NA> <NA> <NA>
2 2 8 8 4 <NA> <NA> <NA> <NA> <NA> <NA>
3 0 8 3 3 2 <NA> <NA> <NA> <NA> <NA>
4 1 8 8 6 8 <NA> <NA> <NA> <NA> <NA>
5 2 4 2 7 6 <NA> <NA> <NA> <NA> <NA>
6 3 9 7 4 6 <NA> <NA> <NA> <NA> <NA>
7 0 1 1 1 1 8 <NA> <NA> <NA> <NA>
8 1 3 9 1 4 8 <NA> <NA> <NA> <NA>
9 2 9 9 3 5 8 <NA> <NA> <NA> <NA>
10 3 8 4 3 3 1 <NA> <NA> <NA> <NA>
11 4 1 6 5 9 4 <NA> <NA> <NA> <NA>
12 0 3 1 6 7 5 5 <NA> <NA> <NA>
13 1 7 4 4 4 6 3 <NA> <NA> <NA>
14 2 3 1 9 9 3 5 <NA> <NA> <NA>
15 3 2 9 7 3 8 4 <NA> <NA> <NA>
16 4 2 6 7 9 5 2 <NA> <NA> <NA>
17 5 9 5 9 9 6 9 <NA> <NA> <NA>
18 0 4 2 9 5 7 1 7 <NA> <NA>
19 1 4 9 1 5 3 2 8 <NA> <NA>
20 2 7 5 8 3 6 4 5 <NA> <NA>
21 3 5 4 4 8 1 8 8 <NA> <NA>
22 4 8 7 9 9 1 2 1 <NA> <NA>
23 5 8 8 3 9 9 6 4 <NA> <NA>
24 6 6 9 4 7 3 4 1 <NA> <NA>
25 0 8 5 5 3 1 6 4 9 <NA>
26 1 5 3 5 3 3 4 2 7 <NA>
27 2 3 1 5 1 3 3 1 1 <NA>
28 3 5 4 6 2 5 1 6 3 <NA>
29 4 7 9 2 7 1 5 9 7 <NA>
30 5 9 2 4 3 5 9 1 9 <NA>
31 6 1 4 4 9 5 8 8 7 <NA>
32 7 6 3 9 4 7 3 2 4 <NA>
33 0 7 9 4 5 9 1 4 6 4
34 1 4 1 8 2 3 3 7 8 9
35 2 9 2 7 6 7 7 2 1 2
36 3 1 5 5 7 8 9 3 4 9
37 4 4 2 8 7 4 8 8 3 1
38 5 6 6 9 7 2 7 4 6 6
39 6 3 1 4 2 7 1 6 9 2
40 7 5 1 3 7 2 2 5 8 9
41 8 7 4 4 2 5 8 8 9 9