Ошибка значения: не удалось преобразовать строку в float::’30/01/20′

#python #pandas #numpy #gaussian

#python #панды #numpy #гауссовский

Вопрос:

я продолжаю получать эту ошибку

я пытался это сделать, но появляется ошибка значения https://colab.research.google.com/drive/1jEmsG9WWRpUmuU92URD0PxtzWkpETlY3?usp=sharing

 from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

import datetime 




df = pd.read_csv('/content/covid_19_india.csv')
df['split'] = np.random.randn(df.shape[0], 1)

msk = np.random.rand(len(df)) <= 0.7

training = df[msk]
test = df[~msk]


xtrain = training.drop('Sno', axis=1)
ytrain = training.loc[:, 'Sno']
xtest = test.drop('Sno', axis=1)
ytest = test.loc[:, 'Sno']



model = GaussianNB()


model.fit(xtrain, ytrain)


pred = model.predict(xtest)


mat = confusion_matrix(pred, ytest)
names = np.unique(pred)
sns.heatmap(mat, square=True, annot=True, fmt='d', cbar=False,
            xticklabels=names, yticklabels=names)
plt.xlabel('Truth')
plt.ylabel('Predicted')
  

Трассировка ошибки значения (последний последний вызов)
в ()
31
32 # Обучить модель
—> 33 model.fit(xtrain, ytrain)
34
35 # Прогнозировать вывод

6 кадров /usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py в asarray(a, dtype, порядок) 83 84 «»» —> 85 возвращаемый массив(a, dtype, copy=False, order=порядок) 86 87

Ошибка значения: не удалось преобразовать строку в float: ’30/01/20′

любая помощь

Комментарии:

1. Чего вы ожидали? это не плавающее число : '30/01/20' , это дата! Вероятно, вы читаете неправильный столбец из входного файла.

2. привет, спасибо за ответ, я студент, это для проекта. прогнозирование — это цель . можете ли вы помочь мне с confusion_matrix с помощью GaussianNB()

Ответ №1:

В сообщении об ошибке говорится, что строку «30/01/20» не удалось преобразовать в float.

Итак, похоже, что ваш фрейм данных содержит столбец с датами.

Обратите внимание, что когда read_csv считывает исходные данные, он пытается преобразовать числовые столбцы либо в int, либо в float, но другие столбцы (которые нельзя преобразовать таким образом) остаются в виде строк, и эти столбцы имеют объектный тип данных.

Начните с определения, какой столбец содержит даты. Затем, чтобы преобразовать этот столбец в datetime, уже на этапе чтения передайте параметр parse_dates в read_csv со списком имен столбцов, подлежащих преобразованию.

Тогда, по крайней мере, не должно быть проблем с преобразованием в float.

Ответ №2:

Как упоминалось как в комментариях, так и в другом ответе на этот вопрос, у вас есть столбец дат, отформатированный в виде строк в вашем наборе данных. Здесь у вас есть пара вариантов.

Не используйте столбец даты

Для аргументации предположим, что ваши даты находятся в столбце с именем df['dates'] . Вы можете просто удалить столбец даты, если не хотите его использовать.

 df.drop('date', axis=1)
  

Преобразование дат в формат datetime

Другой вариант — преобразовать этот столбец в формат datetime. Это можно сделать с помощью apply() и datetime.datetime.strptime . Если вы начинающий специалист по обработке данных, вам следует прочитать, а затем добавить в закладки https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior . Это довольно удобно, я обещаю.

 from datetime import datetime
df['date'] = df['date'].apply(lambda d:datetime.strptime(d, '%m/%d/%y')