如何强制所有字符串浮动?

ASH*_*ASH 5 python machine-learning python-3.x scikit-learn

我有一个小数据框,只包含两列,其中应该包含所有浮点数。所以,我有两个字段名称“价格”和“分数”。当我查看数据时,它对我来说都像是浮动的,但显然有些东西是一个字符串。有什么方法可以踢掉这些是字符串但看起来像浮动的东西吗?或者,有没有办法强制一切都浮动?错误发生在最后一行显示在这里,然后没有其他任何工作。

df = pd.read_csv('C:\\my_path\\analytics.csv')
print('done!')
modDF = df[['Price', 'Score']].copy()
modDF = modDF[:100]
for i_dataset, dataset in enumerate(datasets):
    X, y = dataset
    # normalize dataset for easier parameter selection
    X = StandardScaler().fit_transform(X)
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

datasets = [modDF]
for i_dataset, dataset in enumerate(datasets):
    X, y = dataset
    # normalize dataset for easier parameter selection
    X = StandardScaler().fit_transform(X)


Traceback (most recent call last):

  File "<ipython-input-18-013c2a6bef49>", line 5, in <module>
    X = StandardScaler().fit_transform(X)

  File "C:\Users\rs\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\base.py", line 553, in fit_transform
    return self.fit(X, **fit_params).transform(X)

  File "C:\Users\rs\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\preprocessing\data.py", line 639, in fit
    return self.partial_fit(X, y)

  File "C:\Users\rs\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\preprocessing\data.py", line 663, in partial_fit
    force_all_finite='allow-nan')

  File "C:\Users\rs\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\utils\validation.py", line 496, in check_array
    array = np.asarray(array, dtype=dtype, order=order)

  File "C:\Users\rs\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\core\numeric.py", line 538, in asarray
    return array(a, dtype, copy=False, order=order)

ValueError: could not convert string to float: 'Price'
Run Code Online (Sandbox Code Playgroud)

Ede*_*koh 5

您可以尝试使用pd.to_numeric像这样:

df = df.apply(pd.to_numeric, errors='coerce', downcast='float')
Run Code Online (Sandbox Code Playgroud)

哪个会尝试将您的数据转换为浮点数,而不是浮点数的数据将作为 Nan 返回。

然后

df.dropna(how='any', axis=0, inplace=True)
Run Code Online (Sandbox Code Playgroud)

它只会删除任何包含至少 1 个 Nan 值的行。