【问题标题】:ValueError: could not convert string to float: :'30/01/20'ValueError:无法将字符串转换为浮点数::'30/01/20'
【发布时间】:2021-02-14 09:30:59
【问题描述】:

我不断收到此错误,感谢您

我一直在尝试这个,但出现值错误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')

ValueError Traceback(最近一次调用最后一次) 在 () 31 32 # 训练模型 ---> 33 model.fit(xtrain, ytrain) 34 35 # 预测输出

6 帧 /usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order) 83 84 """ ---> 85 返回数组(a,dtype,copy=False,order=order) 86 87

ValueError:无法将字符串转换为浮点数:'30/01/20'

任何帮助

【问题讨论】:

  • 您期待什么?这不是一个浮点数:'30/01/20',这是一个日期!您可能从输入文件中读取了错误的列。
  • 您好,感谢您回复我是学生,这是项目。预测是目标。你能帮我解决使用 GaussianNB() 的混淆矩阵吗

标签: python pandas numpy gaussian


【解决方案1】:

错误消息说“30/01/20”字符串不能 转换为 浮点数。

看来您的 DataFrame 包含一个带日期的列。

请注意,当 read_csv 读取源数据时,它会尝试转换 数字列到 int 或 float,但其他列 (不能以这种方式转换)保留为字符串和 这些列具有 object 数据类型。

从识别哪一列包含日期开始。 然后,将此列转换为 datetime,最早在 读取阶段,将 parse_dates 参数传递给 read_csv, 带有要转换的列名列表。

那么至少转换成float应该没有问题。

【讨论】:

    【解决方案2】:

    正如 cmets 和此问题的其他答案中所提到的,您的数据集中有一列日期格式化为字符串。您有几个选择。

    不要使用日期列

    为了争论,假设您的日期在名为df['dates'] 的列中。如果您不想使用日期列,可以直接删除它。

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

    将日期转换为日期时间格式

    另一个选项是将此列转换为日期时间格式。这可以使用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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2019-03-23
      • 2018-06-13
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多