как найти индекс строки после выполнения метода startswith()

#python #pandas

#python #pandas

Вопрос:

Я хочу выполнять поиск по столбцу, пока не найду str Linear , найти индекс этого местоположения, добавить к нему 1, а затем извлечь фрейм данных с помощью нарезки.

Я попробовал следующее

 for sheet_name, df in Input_Data.items():
    for line in sheet_name:
        if line.startswith('Linear'):
            index = line.index('Linear')
            break
    df1 = df[index 1:236]
    df1.loc[:,'Unnamed: 26']*=-1  
    df1.loc[:,'Unnamed: 27']*=-1
    df=df1.sort_index(ascending=False)
    Indexer=df.columns.tolist()
    df = [(pd.concat([df[Indexer[0]],df[Indexer[num]]],axis=1)) for num in [1,2,3,4,5,6]]#concatenation
    df = [(df[num].astype(str).agg(','.join, axis=1)) for num in [0,1,2,3,4,5]]
    df=pd.DataFrame(df)
    df=df.loc[0].append(df.loc[1].append(df.loc[2].append(df.loc[3].append(df.loc[4].append(df.loc[5])))))
  

Однако мой «индекс» возвращает 0, где на самом деле он должен быть 125….

Ответ №1:

Если line.startswith('Linear') , ‘Linear’ будет первым словом в line .

Если вам нужен номер строки, вы можете попробовать найти его; enumerate это ваш друг.

 def find_index_of(lines, predicate):
  for index, line in enumerate(lines):
    if predicate(line):
      return index

index = find_index_of(sheetname, lambda x: x.startswith("Linear"))
  

Ответ №2:

Первая проверка, которую вы делаете startswith , означает, что строка начинается с аргумента — index 0 и forward , поэтому index в этом случае всегда будет 0.

Я думаю, что цикл, который вы ищете, имеет диапазон или номер индекса, чтобы найти строку, начинающуюся с этой строки, и ссылаться на все строки после этой строки.

 for index in range(len(sheet_name)):
    if sheet_name[index].startswith('Linear'):
        df1 = df[index 1:236]
        break
  

Комментарии:

1. Исправьте, и этот элемент будет числом, с которого я могу начать нарезку

2. Я обновил свой исходный пост полным кодом для полноты. Я вставил предложенный вами код, и каким-то образом он включает нежелательные строки, присутствующие в столбце

3. Я думаю, что проблема заключается в предложенной вами первой строке for index in range(len(sheet_name)): , поскольку len() просто подсчитывает длину строки. Я думаю, вы имели в виду длину столбца?