在Google Colab中从Google Sheets导入表格时指定数据类型,解决末尾零丢失
解决Google Sheets导入DataFrame时数值尾0丢失及类型问题
当使用gspread的get_all_records()导入数据时,确实无法直接像pd.read_excel那样指定列数据类型,这也是导致数值尾0丢失、列被识别为object类型的核心原因。以下是两种可行的解决方法:
方案一:手动获取单元格值并指定类型转换
跳过get_all_records()的自动解析,直接获取原始单元格值后自行处理类型转换,同时可修正数值解析错误:
planilha_reg = gc.open('base_modelo_REG') aba_reg = planilha_reg.sheet1 # 获取所有单元格内容(含表头) all_values = aba_reg.get_all_values() # 构建初始DataFrame df_reg = pd.DataFrame(all_values[1:], columns=all_values[0]) # 针对目标列进行类型转换及精度修复 target_columns = ['你的列名1', '你的列名2'] for col in target_columns: # 转换为数值类型,同时处理可能的解析错误 df_reg[col] = pd.to_numeric(df_reg[col], errors='coerce') # 保留三位小数,恢复末尾的0 df_reg[col] = df_reg[col].round(3)
方案二:导出为CSV后用pandas读取(支持指定dtype)
将Google Sheets导出为CSV格式,再用pd.read_csv指定列数据类型,完全复用你熟悉的pandas参数:
planilha_reg = gc.open('base_modelo_REG') aba_reg = planilha_reg.sheet1 # 将Sheet导出为CSV格式内容 csv_content = aba_reg.export(format='csv') # 用StringIO读取CSV并指定列类型 from io import StringIO df_reg = pd.read_csv( StringIO(csv_content), dtype={'你的列名1': float, '你的列名2': float} ) # 若需要强制显示三位小数(包括尾0),可设置pandas显示选项 pd.options.display.float_format = '{:.3f}'.format
额外注意事项
如果出现20.180变为2.018这类数值错误,大概率是Google Sheets的单元格格式设置问题——比如单元格被设为科学计数法或错误的小数位数。建议先在Google Sheets中把目标列格式改为「数值」并指定小数位数为3,再进行导入,能从根源减少解析偏差。
内容的提问来源于stack exchange,提问作者Luiz Gustavo Machado Ribeiro
相关产品推荐
相关产品推荐

