Python 如何将str转换为float?ValueError:无法将字符串转换为浮点:“025691372”

Python 如何将str转换为float?ValueError:无法将字符串转换为浮点:“025691372”,python,machine-learning,neural-network,spyder,xgboost,Python,Machine Learning,Neural Network,Spyder,Xgboost,我使用XGBoost来表示功能重要性,我想选择使我具有90%重要性的功能,因此首先我构建了一个数据框架,因为我需要它用于excel,然后我编写了一个while循环来评估使我具有90%重要性的功能。之后是一个神经网络,但它不在下面的代码中。我知道也许有一些最简单的方法可以做到这一点,但这给了我一个错误: ValueError: could not convert string to float: '0,25691372' 代码是 import pandas as pd import nump

我使用XGBoost来表示功能重要性,我想选择使我具有90%重要性的功能,因此首先我构建了一个数据框架,因为我需要它用于excel,然后我编写了一个while循环来评估使我具有90%重要性的功能。之后是一个神经网络,但它不在下面的代码中。我知道也许有一些最简单的方法可以做到这一点,但这给了我一个错误:

ValueError: could not convert string to float: '0,25691372'
代码是

  import pandas as pd
import numpy as np

from sklearn.ensemble import RandomForestRegressor
from sklearn.feature_selection import SelectFromModel
from sklearn import preprocessing

from sklearn.model_selection import train_test_split
from xgboost import XGBRegressor
from matplotlib import pyplot as plt


dataset = pd.read_csv('CompleteDataSet_original_Clean_CONC.csv', decimal=',', delimiter = ";")
from sklearn.metrics import r2_score

label = dataset.iloc[:,-1]
features = dataset.drop(columns = ['Label'])
y_max_pre_normalize = max(label)
y_min_pre_normalize = min(label)

def denormalize(y):
    final_value = y*(y_max_pre_normalize-y_min_pre_normalize)+y_min_pre_normalize
    return final_value
X_train1, X_test1, y_train1, y_test1 = train_test_split(features, label, test_size = 0.20, random_state = 1, shuffle = True)

y_test2 = y_test1.to_frame()
y_train2 = y_train1.to_frame()

scaler1 = preprocessing.MinMaxScaler()
scaler2 = preprocessing.MinMaxScaler()
X_train = scaler1.fit_transform(X_train1)
X_test = scaler2.fit_transform(X_test1)


scaler3 = preprocessing.MinMaxScaler()
scaler4 = preprocessing.MinMaxScaler()
y_train = scaler3.fit_transform(y_train2)
y_test = scaler4.fit_transform(y_test2)


sel = XGBRegressor(colsample_bytree= 0.7, learning_rate = 0.005, max_depth = 5, min_child_weight = 3, n_estimators = 1000)
sel.fit(X_train, y_train)
importances = sel.feature_importances_

importances = [str(i) for i in importances]

importances = [i.replace(".", ",") for i in importances]

df1 = pd.DataFrame(features.columns)
df1.columns = ['Features']
df2 = pd.DataFrame(importances)
df2.columns = ['Importances [%]']
result = pd.concat([df1,df2],axis = 1)
result = result.sort_values(by='Importances [%]', ascending=False)

result.to_excel("Feature_Results.xlsx") 

i = 0
somma = 0
feature = []
while somma <=0.9:
    a = result.iloc[i,-1]
    somma = float(a) + somma
    feature.append(result.iloc[i,-2])
    i = i + 1

尝试将00001转换为0.0001,然后将字符串转换为float。

float'025691372'。替换。 可以使用来处理,用作十进制分隔符

import locale
locale.setlocale(locale.LC_ALL, 'fr_FR')
...
    somma = locale.atof(a) + somma

用a替换,我只浏览了代码,但看起来像是stri.Replace.,因为I的重要性是问题的根源。你为什么这么做?是的,问题是这个。我这样做是因为我需要将这个数据框导出到excel中。因此,我更喜欢将小数分隔符放在一边,为什么在创建数据帧后分配列名?对我来说,执行df1=pd.DataFramefeatures.columns没有多大意义;df1.columns=['Features']而不是df_1=pd.DataFramefeatures.columns,columns=['Features']。对于两种不同的列表理解,对于重要性来说,这是同样的事情,应该很容易改变。使用atof的原因是十进制分隔符取决于区域设置-问题中给出的打印版本适用于使用的区域设置,而不是。-python在调用float时无法直接解析它,正如它所期望的那样。相反,我尝试了你的解决方案,但不起作用。错误为错误:不支持的区域设置。我如何修复它?您的计算机中可能没有安装区域设置。您可以使用locale-a检查并安装它@GabrieleValvo fr_fr只是一种可能的选择。使用您使用的任何语言环境,无论是意大利语、德语、瑞士德语……是的,但我不知道如何安装。我必须使用提示吗?