#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() просто подсчитывает длину строки. Я думаю, вы имели в виду длину столбца?