Python:ValueError:无法将字符串转换为浮点:';D';

Python:ValueError:无法将字符串转换为浮点:';D';,python,scikit-learn,Python,Scikit Learn,我正在加载一个train.csv文件,以使其适合随机分类器。 .csv文件的加载和处理进行得很好。我可以玩我的数据帧 当我尝试时: from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=150, min_samples_split=2, n_jobs=-1) rf.fit(train, target) 我明白了: ValueError: could not con

我正在加载一个train.csv文件,以使其适合随机分类器。 .csv文件的加载和处理进行得很好。我可以玩我的数据帧

当我尝试时:

from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=150, min_samples_split=2, n_jobs=-1)
rf.fit(train, target)
我明白了:

ValueError: could not convert string to float: 'D'
我试过:

train=train.astype(float)
将所有“D”替换为另一个值

train.convert_objects(convert_numeric=True)
但这个问题仍然存在

我还尝试打印csv文件中的所有valueErrors,但找不到对“D”的引用

这是我的追踪:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-20-9d8e309c06b6> in <module>()
----> 1 rf.fit(train, target)

\Anaconda3\lib\site-packages\sklearn\ensemble\forest.py in fit(self, X, y, sample_weight)
    222 
    223         # Convert data
--> 224         X, = check_arrays(X, dtype=DTYPE, sparse_format="dense")
    225 
    226         # Remap output

\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_arrays(*arrays, **options)
    279                     array = np.ascontiguousarray(array, dtype=dtype)
    280                 else:
--> 281                     array = np.asarray(array, dtype=dtype)
    282                 if not allow_nans:
    283                     _assert_all_finite(array)

\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
    460 
    461     """
--> 462     return array(a, dtype, copy=False, order=order)
    463 
    464 def asanyarray(a, dtype=None, order=None):

ValueError: could not convert string to float: 'D'
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
---->1 rf.配合(列车、目标)
\Anaconda3\lib\site packages\sklearn\employee\forest.py适合(自身、X、y、样本重量)
222
223#转换数据
-->224 X,=检查数组(X,dtype=dtype,稀疏格式=“密集”)
225
226#重新映射输出
\检查数组(*数组,**选项)中的Anaconda3\lib\site packages\sklearn\utils\validation.py
279数组=np.ascontiguousarray(数组,dtype=dtype)
280其他:
-->281数组=np.asarray(数组,dtype=dtype)
282如果不允许,则:
283断言所有有限(数组)
\asarray中的Anaconda3\lib\site packages\numpy\core\numeric.py(a,数据类型,顺序)
460
461     """
-->462返回数组(a,数据类型,copy=False,order=order)
463
464 def asanyarray(a,数据类型=无,订单=无):
ValueError:无法将字符串转换为浮点:“D”

我应该如何处理这个问题?

如果没有RandomForestClassifier(据我所知),它不是python库(包含在python中),很难知道您的情况如何。但是,实际情况是,在某个时候,您试图将字符串“D”转换为浮点。 我可以通过以下操作重现您的错误:

float('D')
现在,为了能够调试此问题,我建议您捕获异常:

try:
  rf.fit(train, target)
except ValueError as e:
  print(e)
  #do something clever with train and target like pprint them or something.
然后你可以看看到底发生了什么。我找不到关于随机森林分类器的更多信息,除了这个可能有用的:

您应该浏览并清理数据。可能您的数据中有一个“D”,代码试图将其转换为浮点。一个“try except”中的跟踪“块是个好主意。

您需要向我们显示您准备好的文件。这就是D的来源。只需要一两行就可以了,而且代码应该是在数据帧中加载的。数据帧不是您想象的那样。这就是我所做的:
cols=['colname1','colname2'…]
train=pd.read\u csv(“C://train//train.csv”,names=cols,delimiter=','))
这是一行:
5 146408P0015 34.856928-82.439238 SA01 Greenville SC 29611 HXYF Greenville 0 0 0 0 0 0 0 HAXXF 0识字与语言ESL识字与语言书籍G61 AA B 266 0
没有逗号时,为什么要将逗号设置为分隔符?Slate,我正在读取csv文件,因此是逗号。当我不使用逗号时,值会被默认的分隔符as tab读取,这是错误的。这里有一个有趣的注意事项,当我使用逗号时,所有列的数据类型都是Object(我无法将其转换为float),当我不使用逗号作为分隔符时,默认情况下,列是float64,这就是我试图实现的目标。