Python 来自numpy.matrix的奇怪输出
我有一个数据集,它包含32562行和15列,每行中每列的元素都用逗号“,”分隔。我尝试读取它并使用以下代码将所有数据存储到矩阵中:Python 来自numpy.matrix的奇怪输出,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个数据集,它包含32562行和15列,每行中每列的元素都用逗号“,”分隔。我尝试读取它并使用以下代码将所有数据存储到矩阵中: import numpy as np f = open("adult.data",'r') data = [] for line in f.readlines(): data.append(line.split(",")) print(data[0]) data = np.matrix(data) print(data) 我认为最终数据应该是一个带有形
import numpy as np
f = open("adult.data",'r')
data = []
for line in f.readlines():
data.append(line.split(","))
print(data[0])
data = np.matrix(data)
print(data)
我认为最终数据应该是一个带有形状(32562,15)的numpy矩阵,但实际形状是(132562),其中有很多列表([一行数据]):
这怎么会发生?numpy在将包含字符串的列表更改为矩阵时是否有问题?如果任何行中的列数不同,则会发生这种情况,因为
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,该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)])
或者使用,或者
但在您的情况下,问题似乎是文件末尾有一个额外的空行
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)
你能准确地显示数据的格式吗?显示前几行吗?如果你使用
np.array(data)
你会得到一个(32562,)形状的数组-一个列表数组。使用np.matrix
添加一个维度(本例中为1),因为该维度始终是2d。注意,数据类型是object
。我看到一个列表([\n])
元素。那将是一个空白行。如果要使用读行
,请去掉换行符并跳过空行。并确保每行有15个元素(拆分后)。我会尝试:np.genfromtxt(文件名,分隔符=',',dtype=None,encoding=None)