3

kaggle.com からの python のプロジェクトがあります。データセットの読み取りに問題があります。1 つのcsv ファイルがあります。それを読み込んで、ターゲットとトレーニングの部分を配列に入れる必要があります。

以下は、データ セットの最初の 3 行です (ターゲット列は 19 列目で、特徴は最初の 18 列です)。

user    gender  age how_tall_in_meters  weight  body_mass_index x1  
debora  Woman   46  1.62    75  28.6    -3  
debora  Woman   46  1.62    75  28.6    -3  

ここに表示されていないターゲット列には文字列値があります。

from pandas import read_csv
import numpy as np
from sklearn.linear_model.stochastic_gradient import SGDClassifier
from sklearn import preprocessing
import sklearn.metrics as metrics
from sklearn.cross_validation import train_test_split

#d = pd.read_csv("data.csv", dtype={'A': np.str(), 'B': np.str(), 'S': np.str()})

dataset = np.genfromtxt(open('data.csv','r'), delimiter=',', dtype='f8')[1:]
target = np.array([x[19] for x in dataset])
train = np.array([x[1:] for x in dataset])

print(target)

私が得ているエラーは次のとおりです。

Traceback (most recent call last):
  File "C:\Users\Cameron\Desktop\Project - Machine learning\datafilesforproj\SGD_classifier.py", line 12, in <module>
    dataset = np.genfromtxt(open('data.csv','r'), delimiter=',', dtype='f8')[1:]
  File "C:\Python33\lib\site-packages\numpy\lib\npyio.py", line 1380, in genfromtxt
    first_values = split_line(first_line)
  File "C:\Python33\lib\site-packages\numpy\lib\_iotools.py", line 217, in _delimited_splitter
    line = line.split(self.comments)[0]
TypeError: Can't convert 'bytes' object to str implicitly
4

5 に答える 5

4

私にとってうまくいったのは、行を変更することでした

dataset = np.genfromtxt(open('data.csv','r'), delimiter=',', dtype='f8')[1:]

dataset = np.genfromtxt('data.csv', delimiter=',', dtype='f8')[1:]

(残念ながら、根本的な問題が何であったかはよくわかりません)

于 2014-10-02T08:54:18.747 に答える
1

https://mail.python.org/pipermail/python-list/2012-April/622487.htmlによる と、おそらく必要です

import io
import sys
inpstream = io.open('data.csv','rb')
dataset = np.genfromtxt(inpstream, delimiter=',', dtype='f8')[1:]

http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.htmlに示されている例で は、ファイルとして使用されるオブジェクトはクラスStringIOです。それにもかかわらず、関数の仕様から、ファイル名を渡すことは機能するはずだと思います。

于 2016-09-12T05:25:09.740 に答える
0

bytesが示すように、オブジェクトをstrオブジェクトに明示的にデコードする必要がありますTypeError

# For instance, interpret as UTF-8 (depends on your source)
self.comments = self.comments.decode('utf-8')
于 2014-04-27T04:45:00.827 に答える