【问题标题】:ValueError: could not convert string to float, PythonValueError:无法将字符串转换为浮点数,Python
【发布时间】:2017-08-12 17:01:05
【问题描述】:

我有一个数据框,我正在尝试在其上实现特征选择。 有 45 列类型,整数、浮点数和对象。

但我无法拟合任何特征选择模型,因为它会抛出 vale Error。请帮帮我

数据框:

member_id   loan_amnt   funded_amnt funded_amnt_inv term        batch_enrolled   int_rate   grade
58189336    14350       14350       14350           36 months                    19.19      E
70011223    4800        4800        4800            36 months   BAT1586599       10.99      B

 sub_grade  emp_title   emp_length  home_ownership  annual_inc  verification_status pymnt_plan  desc                purpose title      zip_code addr_state   dti
 E3         clerk       9 years     OWN             28700       Source Verified     n           debt_consolidation  Debt consolidation 349xx    FL        33.88
 B4         HR          < 1 year    MORTGAGE        65000       Source Verified     n           home_improvement    Home improvement    209xx   MD      3.64

 last_week_pay  loan_status
 44th week          0
 9th week           1

代码:

 import numpy
 from pandas import read_csv
 from sklearn.decomposition import PCA
 # load data
 df = pd.read_csv("C:/Users/anagha/Documents/Python  Scripts/train_indessa.csv")
 array = df.values
 X = array[:,0:44]
 Y = array[:,44]
 # feature extraction
 pca = PCA(n_components=3)
 fit = pca.fit(X)

错误:

 Traceback (most recent call last):

 File "<ipython-input-8-20f3863fd66e>", line 2, in <module>
 fit = pca.fit(X)

 File "C:\Users\anagha\Anaconda3\lib\site-  packages\sklearn\decomposition\pca.py", line 301, in fit
self._fit(X)

File "C:\Users\anagha\Anaconda3\lib\site-packages\sklearn\decomposition\pca.py", line 333, in _fit
copy=self.copy)

File "C:\Users\anagha\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 382, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)

ValueError: could not convert string to float: '44th week'

【问题讨论】:

    标签: python-3.x pandas numpy feature-extraction valueerror


    【解决方案1】:

    无法将像“第 44 周”这样的字符串转换为浮点数。

    字符串 python 中唯一可以实际转换的部分是 44。为此,我建议更改字符串以仅保留数字。之后,您将轻松应用 sklearn fit。下面的代码应该显示如何让你的 np 数组准备好转换为浮点数。

    import numpy as np
    import pandas as pd
    
    data = np.array([['rows','col1','Col2','Col_withtext'],
                ['Row1',1,2,'44th week'],
                ['Row2',3,4,'the 30th week']])
    
    
    df = pd.DataFrame(data=data[1:,1:],
                  index=data[1:,0],
                  columns=data[0,1:])
    

    使用 pandas 替换删除文本

    df['Col_withtext'].replace(to_replace="[a-zA-Z]", value='', 
    regex=True, inplace=True)
    
    df.values
    

    ##打印出来

     array([['1', '2', '44 '],
       ['3', '4', ' 30 ']], dtype=object)
    

    告诉我进展如何!

    【讨论】:

      【解决方案2】:

      您不能在非数字数据上拟合 PCA。 PCA 涉及矩阵分解,并且由于您的某些数据不是数字,因此您不能对其应用 PCA。因此,为了继续使用 PCA,您应该忽略非数字列,或者将它们转换为数字列。

      【讨论】:

      • 如果不是 PCA,你能用其他东西来处理非数值数据吗?我尝试了几种方法,但一切似乎都适用于非数字。当我有非数字数据并对其应用特征选择时,你能建议如何去做吗
      • 您可以从将“36 个月”之类的内容转换为 36 开始,此外,如果您的列的类别数量较少,您可以将它们编码为数字。您可以尝试忽略难以编码的列,例如“desc”(如果有很多可能的类别),并查看您获得的结果是否足够好。
      • 这些列可能对我的预测很重要。那么我无法对非数值数据进行特征选择吗?它需要始终是数字?
      • 在这种情况下,我建议使用其他东西而不是 PCA。您可以尝试使用随机森林,例如 chrisalbon.com/machine-learning/…。但在选择特定方法之前,请检查 sklearn(或您打算使用的任何其他包)是否支持非数字值。有时即使算法允许这样的值,包也不支持它们。
      • 好的,我试试。谢谢
      猜你喜欢
      • 2021-01-11
      • 2018-04-23
      • 2015-03-25
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2021-12-22
      相关资源
      最近更新 更多