我有一个 CSV 文件,其中每行都有一个数组。我想将行内容转换为列,即最后的矩阵(因为我有多行)。我可以使用 for 循环和 csv.reader 来完成它 - 但它很慢。所以,我有一个想法,Pandas 会更快,而且我可以在不需要循环的情况下进行转换。我读取该文件并获得 Size (200,1) 的数据帧类型 - 其中每行包含 700 个以逗号分隔的 float ,例如[0.4、0.5、0.3、...]
如果我对输出执行 .value,我只是将其转换为对象类型 - 仍然无法使用...
我只是不知道如何将这些数据转换为矩阵......
我是不是看错方向了?
ranges = pd.read_csv(name,usecols=['ranges'])
有效的是:
X = open(name)
csv_X=csv.reader(X)
ranges = []next(csv_X)#jump over the first row in the csv
for row in csv_X:
ranges.append(ast.literal_eval(row[14]))
X.close()
但这真的很慢。所以,我关于使用 Pandas 的想法是加快速度。
最佳答案
数据集如下所示:
range
0 [5, 5, 7, 5, 7, 2, 0, 4, 1, 6]
1 [1, 0, 6, 1, 1, 5, 7, 8, 6, 7]
2 [2, 0, 4, 6, 6, 6, 5, 1, 6, 5]
3 [5, 5, 2, 7, 1, 8, 7, 2, 8, 4]
4 [1, 5, 6, 6, 8, 2, 6, 6, 3, 1]
你可以尝试:
pd.DataFrame(np.vstack(df.range.values))
产生:
0 1 2 3 4 5 6 7 8 9
0 5 5 7 5 7 2 0 4 1 6
1 1 0 6 1 1 5 7 8 6 7
2 2 0 4 6 6 6 5 1 6 5
3 5 5 2 7 1 8 7 2 8 4
4 1 5 6 6 8 2 6 6 3 1
已编辑
如果您的行是字符串,例如:
ranges
0 8,9,7,6,3,2,4,1,8,3
1 7,9,9,2,1,6,4,1,8,2
2 9,3,0,9,7,7,0,9,9,6
3 0,7,1,0,5,5,1,2,4,2
4 3,3,8,0,8,7,3,6,6,2
5 9,3,7,6,5,7,8,3,8,7
6 1,6,7,8,5,6,7,0,7,8
7 5,5,0,9,2,1,5,4,3,4
8 3,8,9,8,6,3,8,5,9,8
9 8,5,1,7,1,4,8,1,6,4
尝试:
pd.DataFrame(df.ranges.str.split(',').tolist())
产生:
0 1 2 3 4 5 6 7 8 9
0 8 9 7 6 3 2 4 1 8 3
1 7 9 9 2 1 6 4 1 8 2
2 9 3 0 9 7 7 0 9 9 6
3 0 7 1 0 5 5 1 2 4 2
4 3 3 8 0 8 7 3 6 6 2
5 9 3 7 6 5 7 8 3 8 7
6 1 6 7 8 5 6 7 0 7 8
7 5 5 0 9 2 1 5 4 3 4
8 3 8 9 8 6 3 8 5 9 8
9 8 5 1 7 1 4 8 1 6 4
关于python - 如何将具有行数组的 Dataframe 转换为 numpy 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54645014/