Python-将美元值转换为浮点数

wol*_*tza 1 python string floating-point pandas

我有存储为字符串的销售数据。我正在尝试转换为浮点数,以便可以聚合数据,但收到以下错误“ValueError:无法将字符串转换为浮点数:'收入'。

我还尝试替换美元符号和逗号,但类型仍然是字符串。

>>> df['revenue'] = df['revenue'].replace('$| ','')
>>> type('revenue')
<class 'str'>
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下方法

pd.to_numeric(df.revenue)
Run Code Online (Sandbox Code Playgroud)

但这也给了我一个错误,说“ValueError:无法解析字符串“$1,557.97”

该数据还包含负数(即(45.22))的括号,我不确定如何转换。

fur*_*ras 5

您必须使用regex=Trueand\$因为$在 中具有特殊含义regex
您还必须删除,.

import pandas as pd

df = pd.DataFrame({'revenue': ["$1,557.97 "]})

df['revenue'] = df['revenue'].replace('\$|,', '', regex=True)

df['revenue'] = pd.to_numeric(df['revenue'])

print(df)
print(df.dtypes)
Run Code Online (Sandbox Code Playgroud)

如果空格位于开头或结尾,则不必删除它们 - 但空格不能位于数字之间。


你也pd.to_numeric()可以使用

df['revenue'] = df['revenue'].astype(float)
Run Code Online (Sandbox Code Playgroud)

但你仍然需要在转换为之前删除$and,float


编辑:要删除(( ))您可以使用regex

.replace('\$|,|\(|\)', '', regex=True)
Run Code Online (Sandbox Code Playgroud)

因为( )有特殊含义regex所以你必须使用\(\)

您也可以使用regex [...]不需要\

.replace('[$,()]', '', regex=True)
Run Code Online (Sandbox Code Playgroud)
import pandas as pd

df = pd.DataFrame({'revenue': [" $1,557.97 ", "((45.22))"]})

#df['revenue'] = df['revenue'].replace('\$|,|\(|\)', '', regex=True)
df['revenue'] = df['revenue'].replace('[$,()]', '', regex=True)

#df['revenue'] = pd.to_numeric(df['revenue'])
df['revenue'] = df['revenue'].astype(float)

print(df)
print(df.dtypes)
Run Code Online (Sandbox Code Playgroud)