我有一个小型数据框,仅包含两列,应该全部为浮点数。因此,我有两个字段名为’Price’和’Score’。当我查看数据时,它们看起来都像是浮点数,但显然有些是字符串。有没有办法剔除这些看起来像浮点数但实际上是字符串的东西?或者,有没有办法强制所有数据转换为浮点数?错误发生在最后显示的那一行,然后其他任何操作都无法进行。
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 # 为了更容易选择参数而规范化数据集 X = StandardScaler().fit_transform(X)
这是堆栈跟踪:
datasets = [modDF]for i_dataset, dataset in enumerate(datasets): X, y = dataset # 为了更容易选择参数而规范化数据集 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'
回答:
你可以尝试使用 pd.to_numeric 像这样:
df = df.apply(pd.to_numeric, errors='coerce', downcast='float')
这将尝试将你的数据转换为浮点数,无法转换为浮点数的数据将返回为NaN。
然后
df.dropna(how='any', axis=0, inplace=True)
这将删除任何至少包含一个NaN值的行。