Ошибка значения Python: не удалось преобразовать строку в плавающий фрейм данных (как найти положение значений) - PullRequest
0 голосов
/ 01 сентября 2018

Я использую следующий код Python для классификации. Моя проблема в том, что значения, которые я получаю как пропущенные, не существуют в моем наборе данных. Я хочу создать функцию, которая печатает местоположение и значение, которое не может быть преобразовано из строки в число с плавающей точкой.

import pandas as pd 
import numpy as np
from sklearn import preprocessing as pre
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification
from sklearn import tree
import graphviz 


rec2007 = pd.read_csv("C:/Users/dimitris/Desktop/1.csv")
rec2007=rec2007.fillna(0)


columns = ["ACC_ID","ACCIDENT_TYPE","POLICE_DISTRICT","POLICE_STATION","DISTRICT_ACCIDENT_NO","ACCIDENT_TIME","NO_VEHICLES","NO_INJURED","NAMES_EXCHANGED_IND","POLICE_IND","ABANDON_IND","PHOTOS_IND","STRIKE_LEAVE_IND","POLICE_STATION_ACCIDENT_NO",  "FACTOR_A","PEDESTRIAN_ACTION","MAIN_ROAD","RESIDENCE_AREA",   "FACTOR_B","KM","MTR","FACTOR_C","TRAFFIC_CONTROL","ROAD_WIDTH","POINT_A","POINT_B","DIRECTION","BREAK_LANE_WIDTH","DIAGRAM_CODE",     "FACTOR_D","CONJUCTION_TYPE","ROUTE_PERMITTED","BARRIER","CONSTRICTION",   "PAVEMENT_TYPE","BREAK_LANE","SPEED_LIMIT","ROAD_WORK","BUS_STOP","PEDESTRIAN_CROSSING","LIGHTING","FIRST_EVENT_PLACE","ROAD_DESCR","PAVEMENT_STATUS","WEATHER","FIRST_EVENT","POLICE_OFFICER_GRADE","POLICE_OFFICER_NO","POLICE_CALLED","POLICE_ARRIVED","POLICE_TIME","AMBULANCE_CALLED_BY","AMBULANCE_CALLED","AMBULANCE_ARRIVED","AMBULANCE_TIME"]

all_X = rec2007[columns]
all_y = rec2007["AREA_CODE"]

train_X, test_X, train_y, test_y = train_test_split(
    all_X, all_y, test_size=0.2,random_state=0)

clf = tree.DecisionTreeClassifier() 

clf.fit(train_X, train_y)

predictions = clf.predict(test_X)

спасибо заранее !!!

1 Ответ

0 голосов
/ 01 сентября 2018

Один из способов сделать это - использовать pd.to_numeric, передавая аргумент errors='coerce'.

Затем используйте isna и idxmax, чтобы вернуть первую ошибочную строку.

Например, что-то вроде:

rec2007.loc[pd.to_numeric(rec2007.ACC_ID, errors='coerce').isna().idxmax(), ['ACC_ID']]

Редактировать

Чтобы проверить каждый столбец и вывести только недопустимые значения, вы можете попробовать:

for column in rec2007:
    if pd.to_numeric(rec2007[column], errors='coerce').isna().any():
        print(rec2007.loc[pd.to_numeric(rec2007[column], errors='coerce').isna().idxmax(), [column]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...