在Python中有小数点和千位逗号时,如何更改数据类型?

问题描述 投票:0回答:2

请,我需要将“销售”列更改为数字格式。

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]

非常感谢雨果,

python pandas
2个回答
0
投票

您可以使用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


0
投票

使用自定义转换:

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
© www.soinside.com 2019 - 2024. All rights reserved.