使用numpy创建矩阵CSV文件

时间:2016-11-10 09:15:38

标签: python csv numpy matrix

这里对python相对较新。

所以我有一个包含以下内容的CSV文件:

 dsa dds fsdf dasdsa
 1 1 32.2 9 4
 1 2 53.2 8 2
 1 3 44.2 0 1
 1 4 12.3 3 2
 1 5 15.6 4 3
 2 1 12.3 3 2
 2 2 91.3 4 11
 2 3 32.3 5 33 
 2 4 44.2 3 2
 2 5 55.2 4 1
 3 1 60.2 4 2
 3 2 80.2 1 15
 3 3 10.2 4 1
 3 4 99.2 8 3
 3 5 13.1 10 2
 4 1 32.3 19 2
 4 2 10.3 12 3  
 4 3 52.3 22 4
 .  .  .   .  .
 .  .   .  .  .

我希望我的输出是这样的:

    1    2     3    4  .  .  .
1 32.2  53.2  44.2  12.3  .  .
2 12.3  91.3  32.3  44.2  .  .
3 60.2  80.2  10.2  99.2  .  .
4 32.3  10.3  52.3   .    .  .
.   .    .      .    .    .  .
.   .    .      .    .    .  .

如您所见,我只使用csv文件的前3列,我跳过了第一行(垃圾数据)。

我想使用numpy这样做,所以我认为这段代码可以解决问题:

from scipy.sparse import coo_matrix
import numpy as np

l, c, v = np.load('test.csv', skiprows=1, delimiter=',').T[:3,:]
m = coo_matrix((v, (l-1, c-1)), shape=(l.max(), c.max()))
print(m.toarray())

这样可行,但CSV文件中的前两列将从输出中排除。结果证明是:

[32.2  53.2  44.2  12.3
 12.3  91.3  32.3  44.2
 60.2  80.2  10.2  99.2
 32.3  10.3  52.3    .]

关于如何生成我需要的矩阵(输出)的任何想法? CSV文件很大(它有大约10k行和列),但只需要使用前3列。

谢谢堆!

1 个答案:

答案 0 :(得分:0)

import pandas as pd
data = pd.read_csv('data.txt', delim_whitespace=True)
data2 = data['dds'].reshape(len(data['dds'])/5, 5)
df = pd.DataFrame(data2, columns=range(1, 6), index=range(1, data2.shape[0]+1))
print(df)

<强>更新

没有'垃圾数据':

import pandas as pd
names_ = range(1, 6)
data = pd.read_csv('data.txt', delim_whitespace=True, names=names_)
data2 = data[3].reshape(len(data[3])/5, 5)
df = pd.DataFrame(data2, columns=names_, index=range(1, data2.shape[0]+1))
print(df)