Python 为什么这个字符串不能转换为float?

Python 为什么这个字符串不能转换为float?,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,“金额”列是一个字符串。我想把它改为float,这样我就可以在以后的计算中输入这些行 In [1] import pandas as pd data = pd.read_csv('input.csv') data 请注意,“D”的值是“-”,而不是零 首先,我清理坏数据: In [2] data['Amount'] = data['Amount'].replace(' - ', 0) data 然后我尝试使用两种方法将其转换为float。两

“金额”列是一个字符串。我想把它改为float,这样我就可以在以后的计算中输入这些行

In [1] import pandas as pd

       data = pd.read_csv('input.csv')

       data
请注意,“D”的值是“-”,而不是零

首先,我清理坏数据:

In [2]
    data['Amount'] = data['Amount'].replace(' -   ', 0)
    data
然后我尝试使用两种方法将其转换为float。两者均不成功:

In [3]
    pd.Series(data['Amount']).astype(float)
以及:

在绝望中,我试图在各行中循环:

In [5]
    def cleandata(x):
        return float(x)

    data['Amount'] = data['Amount'].apply(cleandata)
谢谢你能给我的建议。我已经试了好几个小时了。谢谢。

试试:

data = pd.read_csv('input.csv', thousands=',', decimal='.')

你应该去掉逗号,那样可以解决问题。试试这个:

data['Amount'] = data['Amount'].apply(lambda x: x.replace(",", "")) # take the commas away
data['Amount'] = data.Amount.astype(float) 
创建列表(y)似乎有效

In [1]:
import pandas as pd
data = pd.read_csv('input.csv')
y = list(data["Amount"])
y = [item.replace(" -   " , '0') for item in y]
y = [item.replace("," , '') for item in y]
data["Amount"] = y
data["Amount"] = pd.to_numeric(data['Amount'], errors='coerce')
data['Result'] = data["Amount"] - data["Cost"]
data


当然,有一种更好、更具Python风格的方法来写这篇文章。

数据['Amount'].str.replace(“,”,”).astype(float)
混合中抛出的逗号和点就是问题所在。如果您保证数字将以此处显示的格式显示,只需在转换前替换逗号即可。pass param
data=pd.read_csv('input.csv',数千=',')
,因此它会正确处理该列,然后替换
-
,这将非常有效。但是,我收到了相同的错误,无法在以后的计算中使用金额(例如金额减去成本)。您在读取后是否清除了错误数据(即
-
)?您收到的错误具体是什么?是的,已清除坏数据,然后尝试传递以下内容:数据['result']=data['Amount']-data['Cost'],但收到2个错误:-类型错误:不支持的操作数类型-:'str'和'int'-TypeError:ufunc'subtract'不包含签名匹配类型为dtype的循环(“您的数据中仍然有
str
,而不是
-
。请尝试:
data['Amount']=pd。要使用数字(data['Amount',errors='concurve')
您不需要应用,
data['Amount']…str.replace(“,”)
工作起来更快。
Out [4]
    ValueError: Unable to parse string "9,596,249.09" at position 0
In [5]
    def cleandata(x):
        return float(x)

    data['Amount'] = data['Amount'].apply(cleandata)
Out [5]
    ValueError: could not convert string to float: '9,596,249.09'
data = pd.read_csv('input.csv', thousands=',', decimal='.')
data['Amount'] = data['Amount'].apply(lambda x: x.replace(",", "")) # take the commas away
data['Amount'] = data.Amount.astype(float) 
In [1]:
import pandas as pd
data = pd.read_csv('input.csv')
y = list(data["Amount"])
y = [item.replace(" -   " , '0') for item in y]
y = [item.replace("," , '') for item in y]
data["Amount"] = y
data["Amount"] = pd.to_numeric(data['Amount'], errors='coerce')
data['Result'] = data["Amount"] - data["Cost"]
data

Out [1]:
    ID  Amount      Cost        Result
0   A   9596249.09  1000000     8596249.09
1   B   38385668.57 50000       38335668.57
2   C   351740.00   100         351640.00
3   D   0.00        23         -23.00
4   E   178255.96   999         177256.9