这里对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列。
谢谢堆!
答案 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)