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



拜托,我需要将"销售"列更改为数字格式。

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

最新更新