【问题标题】:How can I read n rows after string match in each Excel worksheet?如何在每个 Excel 工作表中的字符串匹配后读取 n 行?
【发布时间】:2022-01-12 05:24:16
【问题描述】:

我有一个包含 35 个工作表的 Excel 工作簿,每个工作表有 100 多行和 30 多列。我只想要每个工作表中的 9 行(这 9 行的所有列)。我曾经能够使用 skiprows 获取行,因为有一个模式。我使用以下内容从每个工作表中读取所需的行:

xl = pd.ExcelFile('group.xlsx')
locations = (list(xl.sheet_names))
df = pd.concat(pd.read_excel('group.xlsx', sheet_name= locations, skiprows = 62,  nrows= 9, usecols= None), axis=1, ignore_index= True)

这不再适用于我,因为我需要的信息不再位于每个工作表的同一行中(某些工作表可能位于第 62 行、第 73 行或第 147 行等)。有没有办法跳转到特定的字符串(“ABC 123”)而不是特定的行?每个工作表中只出现一次“ABC 123”字符串。

如果没有办法跳转到一个字符串,有没有办法通过改变这个来获得每个工作表的“ABC 123”字符串之后的 9 行:

dfa = pd.read_excel('group.xlsx', sheet_name=None)
data = {}
for sheet, df in dfa.items():
    data[sheet] = df.loc[df['col_2'] == "ABC 123"]
df = pd.concat(data)

我觉得这差不多了,但我不确定我需要添加什么。

【问题讨论】:

    标签: python excel pandas concatenation


    【解决方案1】:

    我用另一种方法来完成这个结果。将所有工作表合并为一张,在定义的索引上切片,然后进行合并。

    df = pd.concat(pd.read_excel('group.xlsx', sheet_name=None), ignore_index=True)
    
    indicies = df[df['col_2'] == 'ABC 123'].index #slices = [slice(i, i+9, -1) for i in indicies]
    results= []
    for i in indicies:
        temp= (df.iloc[i+1:i+9])
        results.append(temp)
    df= pd.concat(results)
    
    col_list= df.columns.values.tolist()
    df.dropna(how='all', subset=col_list, inplace=True)
    

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 2019-09-05
      • 2020-04-16
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多