拜托,我需要将"销售"列更改为数字格式。
import pandas as pd
data = {'Sale':['9.455', '34,65%', '234.12', '32.6%','3,5%']}
df = pd.DataFrame(data)
df.dtypes
我需要得到以下结果
[9455, 0.3465, 23412, 0.326,0.035]
谢谢 雨 果
你可以使用 pandas.to_numeric + numpy.where:
values = pd.to_numeric(df.Sale.str.replace("[.%]", "").str.replace(",", "."))
result = np.where(df.Sale.str.contains("%"), values / 100, values)
print(pd.Series(result))
输出
0 9455.0000
1 0.3465
2 23412.0000
3 3.2600
4 0.0350
dtype: float64
该行:
values = pd.to_numeric(df.Sale.str.replace("[.%]", "").str.replace(",", "."))
经过一些预处理后将字符串转换为数值,然后:
result = np.where(df.Sale.str.contains("%"), values / 100, values)
基本上将数字除以100
如果是百分比值。
使用自定义转换:
import pandas as pd
def cast_floats(n):
if n.endswith('%'):
n = float(n.strip('%').replace(',', '.')) / 100
else:
dec_places = len(n[n.index('.') + 1:])
n = float(n) * (10 ** dec_places)
return n
data = {'Sale': ['9.455', '34,65%', '234.12', '32.6%', '3,5%']}
df = pd.DataFrame(data)
df['Sale'] = df['Sale'].apply(cast_floats)
print(df)
输出:
Sale
0 9455.0000
1 0.3465
2 23412.0000
3 0.3260
4 0.0350