【问题标题】:How to force all strings to floats? [duplicate]如何强制所有字符串浮动? [复制]
【发布时间】:2020-05-01 12:18:41
【问题描述】:

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

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)

这是堆栈跟踪:

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'

【问题讨论】:

  • 返回的错误信息是什么?
  • X.astype(float) ?
  • @Raphael 我认为如果任何数据是字符串,即使它看起来像浮点数,也会出错。
  • 对@EdekiOkoh。我忘了他想拆线。
  • 可以显示modDF['price'].unique()

标签: python python-3.x machine-learning scikit-learn


【解决方案1】:

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

df = df.apply(pd.to_numeric, errors='coerce', downcast='float')

这会尝试将您的数据转换为浮点数,非浮点数的数据将作为 Nan 返回。

然后

df.dropna(how='any', axis=0, inplace=True)

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

【讨论】:

  • 我试过了,代码运行良好。我刚刚测试了这个:modDF.dtypes。我有两个领域;两者都是float32。现在,我正在尝试拟合自变量,但我遇到了与最初相同的错误。数据集对我来说看起来不错。显然 Python 不喜欢我的设置。我只是不知道是什么。
  • 你能发布错误消息的确切引用吗?你在转换之前还是之后运行了 modDF.dtypes
  • 基于回溯价格不是浮动的。 pd.to_numeric 之后的 dtype 是什么?
  • 我摆脱了这两个特性,并将其他几个特性推到了修改后的数据框中。现在一切正常。
猜你喜欢
  • 2014-08-07
  • 2015-10-21
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2021-10-18
相关资源
最近更新 更多