【发布时间】:2015-09-22 16:07:05
【问题描述】:
我是 Python 新手。我有两个 CSV 格式的数据文件。我将 CSV 文件数据加载到两个 NumPy 数组中:
matrix1 = numpy.genfromtxt(fileName1)
matrix2 = numpy.genfromtxt(fileName2)
两个矩阵的行和列不相等。
>>print(matrix1.shape)
(971, 4413)
>>print(matrix2.shape)
>>(5504, 4431)
我想以这样的方式组合matrix1和matrix2:
mergedMatrix = [ matrix1, matrix2 ]
我可以使用索引0 和matrix2 使用索引1 从mergedMatrix 访问matrix1。
我尝试使用numpy.concatenate,但它不适用于这两个矩阵。所以我在将matrix1 和matrix2 转换为pandas DataFrames 后尝试使用pandas 合并功能。但是,这样做花费了很多时间,并且所有矩阵都被合并到一个单一的线性数组中,例如[1, 2, 3,4,5...],我无法区分mergedMatrix 中的matrix1 和matrix2。
所以我正在使用:
#mergedMatrix as a list
mergedMatrix = [matrix1, matrix2]
我的数据包含像Inf 这样的值。如果一列在matrix1 中包含值Inf,我想删除该列以及相应的列,即matrix2 中具有相同列号的列。
问题
- 有没有比使用列表
mergedMatrix更好的方法? - 如果不逐一检查每个元素及其列号,如何快速找到
matrix1列是否包含此类值?
示例:
matrix1 = [[1, 2, 3],
[3, inf,0],
[2 , inf, inf]]
matrix2 = [[0, 4, 2, 7],
[0, 1, 0.5, 3],
[1, 2, 3, 9]]
mergedMatrix = [[1, 2, 3],
[3, inf,0],
[2 , inf, inf],
[0, 4, 2, 7],
[0, 1, 0.5, 3],
[1, 2, 3, 9]]
结果应该是:
mergedMatrix = [[1],
[3],
[2],
[0,7],
[0,3],
[1,9]]
removedMatrixCols = [[2, 3],
[inf,0],
[inf, inf],
[4, 2],
[1, 0.5],
[2, 3]]
那我要拆分矩阵:
newMatrix1 = [[1],
[3],
[2]]
newMatrix2 = [[0,7],
[0,3],
[1,9]]
removedCols1 = [[2, 3],
[inf,0],
[inf, inf]]
removedCols2 = [[4, 2],
[1, 0.5],
[2, 3]]
以便我可以将它们分别存储到 CSV 文件中。
【问题讨论】:
-
添加一个包含一些虚拟数据的最小工作示例,包括您尝试过的步骤(例如使用
np.random.rand())。您可以将数组存储在列表中,并通过list[0]和list[0]访问它们 -
如果你能让两个矩阵大小相等,你可以使用
numpy.dstack([matrix1, matrix2]),得到一个整洁的3D矩阵。 -
使用 numpy 存储其数组的方式,您必须使两个矩阵的维度相等。
-
你的矩阵的第二维真的是 4413 和 4431 吗?
-
@Moritz 补充说。是的,我知道我可以使用 list[0] 和 list[1] 访问矩阵。
标签: python csv numpy pandas data-analysis