+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

从Excel读取时熊猫合并的单元格问题

发布于2021-01-17 17:23     阅读(845)     评论(0)     点赞(11)     收藏(4)


0

1

2

3

4

5

6

7

所以我有一个带有一些奇怪样式的xls文件,但是我无能为力,所以我只需要解析它。

在此处输入图片说明

如您所见,我有一些合并的单元格。我想做的是为合并的单元格填充空值(“填充”),但还要保持空单元格不变。

像这样

EIM, C,NI1 Enescu_Ioan, EIM, S,NI11,Enescu_Ioan EIM, C,NI1 Enescu_Ioan, Empty EIM, C,NI1 Enescu_Ioan EIM, S,NI11,Enescu_Ioan EIM, C,NI1,Enescu_Ioan Empty 我现在加载文件的方式是这样。

xl = pd.ExcelFile("data/file.xls")
df = xl.parse(0, header=None)

我也尝试过这样打开文件并访问合并的单元格,但是我得到了一个空列表。

book = xlrd.open_workbook("data/file.xls")
book.sheet_by_index(0).merged_cells # This is empty []

有什么办法可以实现?谢谢!

编辑

关于这个问题可能会有一些困惑,所以我会尽力解释。附件图像是较大文件的子集,其中各列可能以不同顺序出现。我想要实现的是一种区分合并单元格NAN值(在合并单元格中只有第一列具有值,其余均为nan)和空单元格NAN的方法。


解决方案


设法找到修复

def read_excel(path):
    excel = None
    if path.endswith('xlsx'):
        excel = pd.ExcelFile(xlrd.open_workbook(path), engine='xlrd')
    elif path.endswith('xls'):
        excel = pd.ExcelFile(xlrd.open_workbook(path, formatting_info=True), engine='xlrd')
    else:
        raise ValueError("Could not read this type of data")
    return excel

def parse_excel(excel_file):
    sheet_0 = excel_file.book.sheet_by_index(0)
    df = excel_file.parse(0, header=None)
    return sheet_0, df

def fill_merged_na(sheet, dataframe):
    for e in sheet.merged_cells:
        rl, rh, cl, ch = e
        base_value = sheet.cell_value(rl, cl)
        dataframe.iloc[rl:rh, cl:ch] = base_value
    return dataframe

一些重要的位置是打开formatting_info设置为True的excel文件,以便还读取格式,例如合并的单元格和fill_merged_na函数,该函数仅填充合并的nan值,但保留初始的空单元格。

0

1

2

3

4

5

6



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/777385/43c3c98382f8eeb1d5f5/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

11 0
收藏该文
已收藏

评论内容:(最多支持255个字符)