2016-10-24 5 views
0

私はすでにPython 2.7を使用していましたが、最近Python 3に切り替えました。私はすでにいくつかの点でコードを更新していますが、私を欺く。私がしようとしているのは、np.loadtxtを使ってデータセットをロードすることです。このデータにも文字列が含まれているため、完全な配列を文字列としてインポートしています。いくつかのエントリをfloatに変換するために型変換をしたいと思います。これは悲惨に失敗し、なぜ私は理解できません。私が見ているのは、Python 3ではすべての文字列に接頭辞「b」が付いていることです。これには何かがあると感じていますが、簡潔な答えは見つかりません。以下のコードとエラー。Python 3のnumpy配列で文字列データ型をfloatに変換する方法

filename = 'train.csv' 
    raw_data = open(filename, 'rb') 
    data = np.loadtxt(raw_data, delimiter=",", dtype = 'str') 
    dataset = data[1:,1:] 
    print(dataset) 
    original_data = dataset 
    test = float(dataset[0,0]) 
    print(test) 

結果

[["b'60'" "b'RL'" "b'65'" ..., "b'WD'" "b'Normal'" "b'208500'"] 
    ["b'20'" "b'RL'" "b'80'" ..., "b'WD'" "b'Normal'" "b'181500'"] 
    ["b'60'" "b'RL'" "b'68'" ..., "b'WD'" "b'Normal'" "b'223500'"] 
    ..., 
    ["b'70'" "b'RL'" "b'66'" ..., "b'WD'" "b'Normal'" "b'266500'"] 
    ["b'20'" "b'RL'" "b'68'" ..., "b'WD'" "b'Normal'" "b'142125'"] 
    ["b'20'" "b'RL'" "b'75'" ..., "b'WD'" "b'Normal'" "b'147500'"]] 
    --------------------------------------------------------------------------- 
    ValueError        Traceback (most recent call last) 
    <ipython-input-38-c154945cd6f1> in <module>() 
      5 print(dataset) 
      6 original_data = dataset 
    ----> 7 test = float(dataset[0,0]) 
      8 print(test) 

    ValueError: could not convert string to float: "b'60'" 
+0

こんにちはセムは、おそらく最初の場所でファイルを開く必要はありませんが、loadtxtにファイル名を渡すことができます。また、データを解析するためにより強力なnumpy.genfromtxtを試してみることもできます。それ以外にも、データファイルからサンプルラインを提供できますか? – dnalow

+0

こんにちはdnalow、genfromtxtを使用すると、すでに修正されています。ご意見ありがとうございます!以下の回答を投稿します。種類については、Sem –

答えて

0

dnalowによって示唆されるように、私は最初のファイルを開き、そこから読んでいるので、何かが型変換でうまくいきません。解決策はopen open(filename、 'rb')とnp.loadtxtを使用せず、np.genfromtxtを使用することです。以下のコード。

filename = 'train.csv' 
    data = np.genfromtxt(filename, delimiter=",", dtype = 'str') 
    dataset = data[1:,1:] 
    print(dataset) 
    original_data = dataset 
    test = float(dataset[0,0]) 
    print(test) 
    filename = 'train.csv' 
    data = np.genfromtxt(filename, delimiter=",", dtype = 'str') 
    dataset = data[1:,1:] 
    print(dataset) 
    original_data = dataset 
    test = float(dataset[0,0]) 
    print(test) 

結果

[['60' 'RL' '65' ..., 'WD' 'Normal' '208500'] 
    ['20' 'RL' '80' ..., 'WD' 'Normal' '181500'] 
    ['60' 'RL' '68' ..., 'WD' 'Normal' '223500'] 
    ..., 
    ['70' 'RL' '66' ..., 'WD' 'Normal' '266500'] 
    ['20' 'RL' '68' ..., 'WD' 'Normal' '142125'] 
    ['20' 'RL' '75' ..., 'WD' 'Normal' '147500']] 
    60.0 
+0

btwです。 dtypeを指定しないようにすることもできます。 genfromtextは自動型変換を試み、構造化配列を返すと思う。しかし、構造化された配列の使い方は、ndarrayの場合と少し違うので、あなたが望むものではないかもしれません。 – dnalow

+0

'dtype = None'を試してみてください。構造化配列を読み込みます。 – hpaulj