python处理excel表格读取中小数位数不一致问题

问题:在excel表格中有些列/行的数值是通过计算得出,通过设定excel表格中单元格的小数位数,表格中自动存储小数为对应的位数,但是在python读取时往往读取到的小数位数较长,与表格中小数位数不一致。

思路:通过正则表达来获取单元格中小数的位数,在python输出时采用round函数来保留相应的小数位数。

导入库

import pants
from openpyxl import load_workbook
import re 

读取文件

file_path = 'your file path.xlsx'
wb = load_workbook(file_path ,data_only = True)#data_only保证读取为数值,防止读取到的为公式
ws = wb['your_work_sheet']#设定读取的工作表,一般为工作表一

column_index= 1#此处设定列数索引,此处设定为第一列
column_range = ws.iter_cols(min_col = column_index+1, max_col = column_index+1)#此处设定希望读取的列数,可通过改变index值来改变,这里读取的就是第二列到第二列,即读取第二列

创建一个空列表用于存放表格中的数值:

data =  []
for row in column_range:
    column_data = [cell.value for cell in row]
    data.extend(column_data)
cell = ws.cell(row, column_index+1)#此处设定为单元格的行数与列数,此处为第row行,第2列

#获取单元格的数字格式:
number_format = cell.number_format

#使用正则表达式来读取单元格中小数的位数:
decimal_places = 0 #现将小数位数赋为0 
match = re.search(r'\.(\d+)',number_format)#设立正则读取小数点后位数
if match:
    decimal_places = len(match.group(1))#读取第一个捕获组,即(\d+)中的字符串长度

rounded_data = [round(value, decimal_places)if is instance(value,(int,flota))else None for value in data]#. 利用round函数对data中的数据进行保留设定的小数位数

#将其保存为DataFrame的形式
column_name = ws.cell(row, column = column_index+1).value#读取第row行第2列的名称
df = pandas.DataFrame({column_name:rounded_data})
print(df)

至此就完成了对应位数的读取。注意使用代码时将行数(row)与列数(cloumn)设定为自己所需要读取的单元格。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值