【问题标题】:use unique string match as header when importing Excel dataframe导入 Excel 数据框时使用唯一字符串匹配作为标题
【发布时间】:2017-07-24 19:54:23
【问题描述】:

我有一些凌乱的 Excel 电子表格,想将少量单元格导入数据框中。包含我不感兴趣的信息 (".") 和带有空格的单元格 (~) 的行数和列数因电子表格而异。

这是一个电子表格示例(输入):

~   ~   ~   ~   
.   .   .   .   .
~   .   .   .   
.   .   .   .   .
~   ~   ~       
~   Name    ID  Description Notes
12  a   AA  aA  None
3   b   BB  bB  sentence one
44  c   CC  cC  None
9   d   DD  dD  Int

我的逻辑是否正确,我需要先将完整的电子表格导入数据帧,然后将该数据帧解析为唯一字符串 (Name) 作为标题行到第二个要使用的数据帧中?

这就是我导入的方式,但在解析到第二个数据帧时卡住了:

import pandas
file = 'example.xlsx'
xl = pandas.ExcelFile(file, dtype=str) #some cells have values and want just as strings
df = xl.parse("Sheet1")
for index, row in df.iterrows():
    for cell in row:
        if 'Name' in str(cell):
            header_start_row = index
            break

所需的熊猫数据框(输出):

Name    ID  Description Notes
a   AA  aA  None
b   BB  bB  sentence one
c   CC  cC  None
d   DD  dD  Int

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用pandas.read_excel 函数导入您的Excel 工作表。它有一个可选的输入参数skiprows,允许您指定顶部应忽略的行。

    import pandas as pd
    
    file = 'example.xlsx'
    skiprows_amount = 5
    df = pd.read_excel(file, skiprows=range(skiprows_amount), dtype=str)
    

    注意:这个方案有个限制,你必须提前知道要跳过的行数。

    【讨论】:

    • pd.read_excel(file, skiprows=range(header_start_row)) 可能有助于折叠行
    • @lcb 是的,这是一个不错的改进。
    • 它应该从第六行开始,但header_start_row 给出的是 3,而不是 6
    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2012-05-12
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多