あなたの化合物dtype
は、3つのフィールド
In [195]: data=np.genfromtxt('stack39872346.txt',delimiter=',',dtype='S32,float,int')
In [196]: data
Out[196]:
array([(b'"fabc"', 3000.0, 1), (b'"fdef"', 3650.0, 1),
(b'"ghi"', 3000.0, 2)],
dtype=[('f0', 'S32'), ('f1', '<f8'), ('f2', '<i4')])
In [197]: data.shape
Out[197]: (3,)
In [198]: data.dtype
Out[198]: dtype([('f0', 'S32'), ('f1', '<f8'), ('f2', '<i4')])
で1次元配列としてファイルをロードあなたの
Dataset1
文字列DTYPEと2Dです:
In [207]: Dataset1
Out[207]:
array([['abc ', '3000.0', '1'],
['def', '3650.0', '1'],
['xyz', '3000.0', '2']],
dtype='<U6')
は、単純なものに複合DTYPEの変換が少ないですトリッキー。これはastype
で行うことができます。しかしおそらく、リストバージョンのdata
を仲介者として使用する方が簡単かもしれません。
In [203]: data.tolist()
Out[203]: [(b'"fabc"', 3000.0, 1), (b'"fdef"', 3650.0, 1), (b'"ghi"', 3000.0, 2)]
In [204]: np.array(data.tolist())
Out[204]:
array([[b'"fabc"', b'3000.0', b'1'],
[b'"fdef"', b'3650.0', b'1'],
[b'"ghi"', b'3000.0', b'2']],
dtype='|S6')
np.array
はタプルのリストを読んで、そして最も一般的なタイプ、
S6
(PY3のバイト文字列)
今ではastype
でUnicode文字列に変換するのは簡単であるとの2次元配列を作成しました:
In [205]: np.array(data.tolist()).astype("U6")
Out[205]:
array([['"fabc"', '3000.0', '1'],
['"fdef"', '3650.0', '1'],
['"ghi"', '3000.0', '2']],
dtype='<U6')
これは、最初の列が二重引用符で囲まれていることを除いて、Dataset1
に似ています。
私はdtype
を指定して、最後astype
をスキップすることができます:genfromtxt
にそれを伝え、np.array(data.tolist(),dtype=str)
いっそのこと:
np.genfromtxt('stack39872346.txt',delimiter=',',dtype=str)
元の化合物のDTYPEについての素晴らしい事は、あなたが、数値にアクセスできるということです数字としてのフィールド:
In [214]: data['f1']
Out[214]: array([ 3000., 3650., 3000.])
In [215]: Dataset1[:,1]
Out[215]:
array(['3000.0', '3650.0', '3000.0'],
dtype='<U6')
私は二重引用符を扱っていません。 csv
リーダーはそれらを取り除くことができます。 genfromtxt
はありません。幸いにも引用符には区切り文字がありませんので、genfromtxt
の読み取り中にそれらを取り除くconverter
と書くことができます。私はconverter
をロードするときに複合DTYPEを使用するために持っているよう
=================は
def foo(astr):
return astr[1:-1] # crude dequote
In [223]: data=np.genfromtxt('stack39872346.txt',delimiter=',',
dtype='U6,float,int', converters={0:foo})
In [224]: data
Out[224]:
array([('fabc', 3000.0, 1),
('fdef', 3650.0, 1),
('ghi', 3000.0, 2)],
dtype=[('f0', '<U6'), ('f1', '<f8'), ('f2', '<i4')])
In [225]: np.array(data.tolist())
Out[225]:
array([['fabc', '3000.0', '1'],
['fdef', '3650.0', '1'],
['ghi', '3000.0', '2']],
dtype='<U6')
に見えます。
あなたのcsvのコンテンツを含めることができますか? –
今のところcsvは3行ですが、伸びるでしょう: "fabc"、3000.0,1 "fdef"、3650.0,1 "ghi"、3000.0,2 – user914584
これを含めるには、 n個の文字も欠落しています) –