问题描述
|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)