无法将字符串列转换为浮点数

2024-09-22 10:30:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在DataFrame income中添加一个名为'2016 Salary($)'的新列,其中包含以数字形式支付的表Salary中的员工薪酬。我想去掉“$”和“,”来去掉那个数字。你知道吗

但是当我这样做的时候,我得到的错误是:

'Could not convert string to float'

我试着按照提示去做,但不起作用:

income['2016 Salary ($)']= income['SalaryPaid'].str.strip('$').astype(float)
income['2016 Salary ($)'].apply(lambda X:X['Salary Paid'])
income

Tags: toconvertdataframestring错误员工not数字
3条回答

先添加^{}

income['2016 Salary ($)']= income['SalaryPaid'].str.replace(',', '')
                                               .str.strip('$')
                                               .astype(float)

如果从文件创建DataFrame是在^{}中使用thousands参数,则更好的解决方案是:

income = pd.read_csv(file, thousands=',')

income['2016 Salary ($)']= income['SalaryPaid'].str.strip('$').astype(float)

我已经根据您的要求创建了一个虚拟数据帧,并执行了与您前面提到的相同的操作,它对我来说运行良好。你知道吗

import pandas as pd
df = pd.DataFrame(columns=['AA','BB'])
df['AA'] = ['$12,20','$13,30']
df['BB'] = ['X','Y']
print(df)

输出------>; AA BB型 0$12,20倍 1年13.30美元

df['AA'] = df['AA'].str.replace('$','').str.replace(',','').astype(float)
print(df)

输出------>; AA BB型 0.1220倍 1 1330.0年

据我所知,错误出现在您试图应用lambda的代码的第二行,而不是“income['2016 Salary($)'].apply(lambda X:X['Salary Paid'])”,它应该是“income['2016 Salary($)'].apply(lambda X:X['SalaryPaid'])”。我认为名为salarypayd的列有一个拼写错误。你知道吗

尝试以下操作:

数据

dic = {'Name':['John','Peter'],'SalaryPaid':['$204,546,289.35','$500,231,289.35'],'Year':['2008','2009']}
df1 = pd.DataFrame(dic)
df1

    Name    SalaryPaid      Year
0   John    $204,546,289.35 2008
1   Peter   $500,231,289.35 2009

代码

df1['SalaryPaid'] = df1['SalaryPaid'].str.replace(',', '')
# If you want the result as a string : 
df1['2016 Salary ($)']= df1['SalaryPaid'].str.strip('$')
# if you want the result as float : 
#df1['2016 Salary ($)']= df1['SalaryPaid'].str.strip('$').astype(float) 


df1

结果

    Name    SalaryPaid  Year    2016 Salary ($)
0   John    $204546289.35   2008    204546289.35
1   Peter   $500231289.35   2009    500231289.35

相关问题 更多 >