如何使用熊猫将前导零转换为十进制?

问题描述

我有一个 excel 文件,其中的列显示如下:

|Calibre|Item|Aditivo|
|:----|:----|:----|
|015|4120|NO|
|018|4123|SI|
|2|4212|NO|
|075|4141|SI|
|500|4143|NO|

所以我需要制作一个数据框来显示前导零为十进制的数字,就像这样:

|Calibre|Item|Aditivo|
|:----|:----|:----|
|0.15|4120|NO|
|0.18|4123|SI|
|2|4212|NO|
|0.75|4141|SI|
|500|4143|NO|

我只需要转换一些特定的列。 目前我找到的解决方案是这样的:

df=pd.read_excel('/content/file.xlsx',converters={'Calibre':str})
cal=[]
for i in df['Calibre']:
  if i[0]=='0':
    cal.append(float(i.replace('0','0.')))
  else:
    cal.append(int(i))
df['Calibre']=cal

但我真的认为有更好的方法来做到这一点 (我也无法编辑excel文件

解决方法

使用 Series.str.replace^ 作为字符串的开始,然后将值转换为浮点数,因为如果浮点数为整数,则默认情况下整数将转换为带有 .0 后缀的平面:

df=pd.read_excel('/content/file.xlsx',converters={'Calibre':str})

df['Calibre'] = df['Calibre'].str.replace('^0','0.').astype(float)
,

您可以将代码转换为函数并使用 .apply()。如果没有好的样本数据集,我无法对其进行测试,但这可能比循环遍历每个单元格/行更有效。

df=pd.read_excel('/content/file.xlsx',converters={'Calibre':str})
cal=[]

def convert_to_float(cell):
  if cell[0]=='0':
    return(float(i.replace('0','0.')))
  else:
    return(int(i))

df['Calibre'] = df['Calibre'].apply(convert_to_float,axis=1)