Это происходит, если у вас в столбцах разное количество столбцов, поскольку numpy
больше не может интерпретировать список списков как матрицу шириной 15. Это может произойти, если в любой из ваших ячеек есть запятые.или если в некоторых строках отсутствуют значения.
# Example of irregular row length
mat = np.matrix([[1,2,3], [4,5]])
print(mat) # matrix([[list([1, 2, 3]), list([4, 5])]], dtype=object)
print(mat.shape) # (1L, 2L)
# Example of comma in text cell causing irregular row length
from StringIO import StringIO
f = StringIO('1, 2, "Some text"\n3, 4, "More, text"')
mat = np.matrix([line.split(",") for line in f])
print(mat) # [[list(['1', ' 2', ' "Some text"\n']) list(['3', ' 4', ' "More', ' text"'])]]
print(mat.shape) # (1L, 2L)
Если возникает проблема с запятыми, вы можете вместо этого импортировать данные как CSV - это будет обрабатывать правильно отформатированный CSV, который может иметь запятые внутри кавычек.
import csv
f = StringIO('1, 2, "Some text"\n3, 4, "More, text"')
mat = np.matrix([row for row in csv.reader(f, skipinitialspace=True)])
или использоватьgenfromtxt
, loadtxt
или pandas.read_csv
.
Но в вашем случае проблема заключается в дополнительной пустой строке вконец файла.
f = StringIO('6, 7\n8, 9\n\n')
print(np.matrix([line.split(",") for line in f])) # [[list(['6', ' 7\n']) list(['8', ' 9\n']) list(['\n'])]]
Это можно исправить, просто зачистив строки
f = StringIO('6, 7\n8, 9\n\n')
data=[]
for line in f:
line = line.strip()
if line:
data.append(line.split(","))
mat = np.matrix(data)