#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')