Python:值错误:无法将字符串转换为浮点数:“D”

3
我将加载train.csv文件并使用RandomForestClassifier进行拟合。加载和处理.csv文件都顺利完成,我能够操作数据框架。
当我尝试执行以下操作时:
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=150, min_samples_split=2, n_jobs=-1)
rf.fit(train, target)

I get this:

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'

我该如何解决这个问题?


你需要向我们展示你所准备的文件。这就是D的来源。只需要一两行即可,以及加载数据框的代码。数据框不是你想象中的那样。 - Slater Victoroff
这是我所做的:cols=['colname1','colname2'.....]train = pd.read_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 HAXXF 0 0 Literacy Literacy & Language ESL Literacy & Language Books G61 AA B 266 0 - swamoch
为什么在没有逗号的情况下将逗号设置为您的分隔符? - Slater Victoroff
Slater,我正在从csv文件中读取数据,因此需要使用逗号。如果不使用逗号,值将使用默认分隔符制表符进行读取,这是错误的。 有趣的是,当我使用逗号时,所有列的数据类型都是Object(我无法转换为float)。 当我不使用逗号作为分隔符时,默认情况下列的数据类型是float64,这正是我想要实现的。 - swamoch
2个回答

2

在我所找到的范围内,没有名为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.

那么你可以了解一下正在发生的情况。我没有找到太多关于随机森林分类器的信息,除了这个可能有所帮助的网址: https://www.npmjs.com/package/random-forest-classifier


0
你应该探索和清理你的数据。可能你的数据中有一个 'D',而你的代码试图将其转换为浮点数。在“try-except”块中添加跟踪是个好主意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接