使用pandas read_excel读取含文本Excel时如何定义浮点精度?
问题描述
本人刚接触Python(有MATLAB和工程背景),接手的Excel文件包含表头区域和下方的数据区域,数据区包含数字、日期(对我不重要)和字符串。编写代码解析这些文件及工作表,转换为DataFrame以便后处理(类似MATLAB)。
使用pd.read_excel读取时,部分千分位、万分位、十万分位量级的小数值被读取为0整数而非浮点数。尝试过astype、dtype等转换方法,要么完全丢失字符串(需要用这些字符串定位解析逻辑),要么丢失问题列中的字符串,其他方法直接报错。
已确认Excel中的数据正常,无自身精度问题。需求是:在不破坏工作表中字符串的前提下,定义特定单元格或所有数字的浮点精度;小数值的单元格位置因工作表而异,硬编码位置或手动编辑Excel均不可行,需要优雅的解决方案。
编辑补充:经排查发现是引用了旧文件,更新文件路径后read_excel可正常读取预期值。
示例数据(Sheet.xlsx)
| header 1 | header 2 | header 3 |
|---|---|---|
| text | 12 | 0.0001 |
| NaN | 0.001 | text |
| text | text | 11 |
测试代码
import pandas as pd directory = r'C:\Data' sheet = 'sheet1.xlsx' importdata = pd.read_excel(directory, sheet_name=sheet, header=None) print(importdata.loc[2,1]) # 当前输出:0 print(importdata.loc[1,1]) # 期望更高精度,如12.00000等,当前输出:12
解决方案思路(针对排除文件路径错误后的潜在问题)
如果排除文件路径引用错误的情况,若仍出现精度读取问题,可尝试以下方案:
- 读取时指定
dtype=object保留原始数据类型,之后针对数字单元格单独处理精度:import pandas as pd def convert_to_precise_float(val): try: # 尝试转换为浮点数,保留6位小数 return round(float(val), 6) if not pd.isna(val) else val except (ValueError, TypeError): # 非数字类型直接返回 return val directory = r'C:\Data' sheet = 'sheet1.xlsx' # 以object类型读取,保留所有原始内容 importdata = pd.read_excel(directory, sheet_name=sheet, header=None, dtype=object) # 对每个单元格应用转换函数 importdata = importdata.applymap(convert_to_precise_float) print(importdata.loc[2,1]) # 输出0.001 print(importdata.loc[1,1]) # 输出12.0 - 若仅需统一显示格式而非修改数据本身,可设置DataFrame的显示精度:
pd.set_option('display.float_format', '{:.6f}'.format) print(importdata.loc[1,1]) # 显示为12.000000
内容的提问来源于stack exchange,提问作者squeaky-engineer
相关产品推荐
相关产品推荐

