Почему эта программа не может преобразовать строку в плавающий в Python - PullRequest
0 голосов
/ 06 марта 2019

Что с этим не так?

from sklearn.preprocessing import Normalizer
from pandas import read_csv
from numpy import set_printoptions

namaFile = 'dataset.csv'
nama = ['rt', 'niagak', 'niagab', 'sosum', 'soskhus', 'p', 'tni', 'ik', 'ib', 'TARGET']
dataFrame = read_csv(namaFile, names=nama)
array = dataFrame.values

#membagi array
X = array[:,0:9]
Y = array[:,9]

skala = Normalizer().fit(X)
normalisasiX = skala.transform(X)

#data hasil
set_printoptions(precision = 3)
print(normalisasiX[0:10,:])

И когда я запускаю эту программу

Файл "C: \ Users \ Dini \ Anaconda3 \ lib \ site-packages \ sklearn \ utils \ validation.py", строка 433, в check_array

array = np.array (массив, dtype = dtype, order = order, copy = copy)

ValueError: не удалось преобразовать строку в число с плавающей точкой: 'ib'

csv file пожалуйста, помогите мне

1 Ответ

2 голосов
/ 06 марта 2019

Я смотрел на документы (тот же, на который ссылался @OliverRadini), и те же состояния страниц имеют следующее:

заголовок : int, список int, значение по умолчанию ‘infer’

Количество строк для использования в качестве имена столбцов и начало данных. Поведение по умолчанию заключается в выводе имена столбцов: если имена не переданы, поведение идентично header=0 и имена столбцов выводятся из первой строки файл, если имена столбцов передаются явно, то поведение идентично header=None. Явно передайте header=0, чтобы иметь возможность заменить существующие имена. Заголовок может быть списком целых чисел, которые указать расположение строк для мультииндекса в столбцах, например [0,1,3]. Промежуточные строки, которые не указаны, будут пропущены (например, 2 в этот пример пропущен). Обратите внимание, что этот параметр игнорирует комментарии строки и пустые строки, если skip_blank_lines=True, поэтому header=0 обозначает первая строка данных, а не первая строка файла

Вы определяете имена в коде, поэтому не следует включать заголовок в файл. Либо сделайте одно (запишите заголовки в данных CSV), либо другое (запишите имена столбцов в коде) Не делай обоих.

РЕДАКТИРОВАТЬ: Мой ответ остается прежним, но вот один способ, которым вы могли бы обнаружить это самостоятельно:

Со следующими данными CSV (что вы показали на картинке):

BULAN,rt,nigak,niagab,sosum,soskhus,p,tni,ik,ib,TARGET
13-Jan,84876,902,1192,2098,3623,169,39,133,1063,94095
13-Feb,79194,902,1050,2109,3606,153,39,133,806,87992
13-Mar,75836,902,1060,1905,3166,161,39,133,785,83987
13-Apr,75571,902,112,1878,3190,158,39,133,635,82618
13-May,83797,1156,134,1900,3518,218,39,133,709,91604
13-Jun,91648,1291,127,2220,3596,249,39,133,659,99967
13-Jul,79063,1346,107,1844,3428,247,39,133,951,86798

Запуск этого кода ...

from pandas import read_csv
from numpy import set_printoptions

namaFile = 'dataset.csv'
nama = ['rt', 'niagak', 'niagab', 'sosum', 'soskhus', 'p', 'tni', 'ik', 'ib', 'TARGET']

dataFrame = read_csv(namaFile, names=nama)
array = dataFrame.values

print("with names=nama...")
print(array)

dataFrame = read_csv(namaFile)
array = dataFrame.values

print("with no names...")
print(array)

dataFrame = read_csv(namaFile, names=nama, header=0)
array = dataFrame.values

print("with no names=nama and header=0...")
print(array)

Вы получите этот вывод:

with names=nama...
[['rt' 'nigak' 'niagab' 'sosum' 'soskhus' 'p' 'tni' 'ik' 'ib' 'TARGET']
 ['84876' '902' '1192' '2098' '3623' '169' '39' '133' '1063' '94095']
 ['79194' '902' '1050' '2109' '3606' '153' '39' '133' '806' '87992']
 ['75836' '902' '1060' '1905' '3166' '161' '39' '133' '785' '83987']
 ['75571' '902' '112' '1878' '3190' '158' '39' '133' '635' '82618']
 ['83797' '1156' '134' '1900' '3518' '218' '39' '133' '709' '91604']
 ['91648' '1291' '127' '2220' '3596' '249' '39' '133' '659' '99967']
 ['79063' '1346' '107' '1844' '3428' '247' '39' '133' '951' '86798']]

with no names...
[['13-Jan' 84876 902 1192 2098 3623 169 39 133 1063 94095]
 ['13-Feb' 79194 902 1050 2109 3606 153 39 133 806 87992]
 ['13-Mar' 75836 902 1060 1905 3166 161 39 133 785 83987]
 ['13-Apr' 75571 902 112 1878 3190 158 39 133 635 82618]
 ['13-May' 83797 1156 134 1900 3518 218 39 133 709 91604]
 ['13-Jun' 91648 1291 127 2220 3596 249 39 133 659 99967]
 ['13-Jul' 79063 1346 107 1844 3428 247 39 133 951 86798]]

with no names=nama and header=0...
[[84876   902  1192  2098  3623   169    39   133  1063 94095]
 [79194   902  1050  2109  3606   153    39   133   806 87992]
 [75836   902  1060  1905  3166   161    39   133   785 83987]
 [75571   902   112  1878  3190   158    39   133   635 82618]
 [83797  1156   134  1900  3518   218    39   133   709 91604]
 [91648  1291   127  2220  3596   249    39   133   659 99967]
 [79063  1346   107  1844  3428   247    39   133   951 86798]]

Здесь мы ясно видим, что когда вы включаете имена в оба, вы получаете заголовки, перечисленные в первом пункте, а это не то, что нам нужно. Когда вы удаляете names=nama, вы получаете все данные из файла. Когда вы явно перезаписываете имена с помощью names=nama header=0, вы также можете достичь желаемого результата. ОДНАКО я также хотел бы отметить, что в ваших заголовках в вашем коде отсутствует столбец BULAN , поэтому будьте осторожны с этим.

print() ваш друг. Используй это. Он скажет вам, в чем состоят ваши проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...