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))的括号,我不确定如何转换。
您必须使用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)