2017-07-24 60 views
0

我有一些凌乱的Excel电子表格,并希望将少量单元格导入数据框。包含我不感兴趣的信息的行数和列数(“。”)和带空格的单元格()因电子表格而不同。导入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 

是我的逻辑正确的,我需要进口全电子表格转换为数据帧,然后再解析数据帧的唯一字符串(名称 )作为标题行放入第二个数据框中使用?

这是我如何导入,但我粘在解析到第二数据帧:

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 

回答

3

使用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) 

注意:此解决方案的局限性是您必须提前知道要跳过的行的数量。

+1

pd.read_excel(文件,skiprows = range(header_start_row))可能用于折叠行 – lcb

+0

@lcb是的,这是一个很好的改进。 – Xukrao

+0

它应该从第六行开始,但是'header_start_row'给出3,而不是6 – lcb