我正在尝试将Nspy文件中的csv文件加载到机器学习中。到目前为止,我一直都使用int或float数据,但是我当前的csv包含string,float和int,因此dtype参数存在一些麻烦。我的数据集有41188个样本和8个特征,例如:
header("Location:...")
我知道,如果我指定dtype = None,则类型将由各列的内容确定:
47;"university.degree";"yes";176;1;93.994;-36.4;4.857;"no"
,但显然不起作用。首先,genfromtxt的结果是一个具有以下形状的numpy ndarray:
data = np.genfromtxt(filename, dtype=None, delimiter=";", skip_header=1)
我希望(41188,8)
相反,如果我使用默认的dtype:
In [2]: data.shape
Out[2]: (41188,)
我获得以下形状的数据:
data2 = np.genfromtxt(filename, delimiter=";", skip_header=1)
第二,使用dtype = None,我收到以下弃用警告:
In [4]: data2.shape
Out[4]: (41188,8)
我可以通过使用来解决(对吗?):
VisibleDeprecationWarning: Reading unicode strings without specifying the encoding argument is deprecated. Set the encoding, use None for the system default.
我有2个问题:
答案 0 :(得分:1)
带有两行示例行:
In [140]: data = np.genfromtxt(txt, dtype=None, delimiter=';', encoding=None)
In [141]: data
Out[141]:
array([(47, '"university.degree"', '"yes"', 176, 1, 93.994, -36.4, 4.857, '"no"'),
(47, '"university.degree"', '"yes"', 176, 1, 93.994, -36.4, 4.857, '"no"')],
dtype=[('f0', '<i8'), ('f1', '<U19'), ('f2', '<U5'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<f8'), ('f8', '<U4')])
In [142]: data.shape
Out[142]: (2,)
In [143]: data.dtype
Out[143]: dtype([('f0', '<i8'), ('f1', '<U19'), ('f2', '<U5'), ('f3', '<i8'), ('f4', '<i8'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<f8'), ('f8', '<U4')])
这是一个普通的结构化数组-data
是具有8个字段的一维数组。这些字段的dtype
与每一列通用的浮点数,整数或字符串类型相匹配。
您通过名称而不是列号访问字段:
In [144]: data['f0']
Out[144]: array([47, 47])
In [145]: data['f1']
Out[145]: array(['"university.degree"', '"university.degree"'], dtype='<U19')
请注意,我包括了encoding=None
。我不确定何时需要这样做,但很容易包含在内。