в Pandas как мне использовать имя переменной для представления индекса строки, чтобы получить строку, которую можно использовать в качестве строки заголовка? - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь очистить файл Excel, который имеет случайное форматирование. Файл имеет пустые строки сверху, с фактическими заголовками столбцов в строке 8. Я избавился от пустых строк и теперь хочу использовать строку строки 8 в качестве истинных заголовков столбцов в кадре данных.

Я использую этот код для получения позиции заголовков столбцов путем поиска строки 'Destination' во всем фрейме данных, а затем определяю местоположение значения True в логической маске, чтобы получить список для переименования заголовков столбцов:

boolmsk=df.apply(lambda row: row.astype(str).str.contains('Destination').any(), axis=1)
print(boolmsk)
hdrindex=boolmsk.index[boolmsk == True].tolist()
print(hdrindex)
hdrstr=df.loc[7]
print(hdrstr)
df2=df.rename(columns=hdrstr)

Однако, когда я пытаюсь использовать hdrindex в качестве переменной, я получаю ошибки при создании второго кадра данных (ie, когда я пытаюсь использовать hdrstr для замены заголовков столбцов.)

boolmsk=df.apply(lambda row: row.astype(str).str.contains('Destination').any(), axis=1)
print(boolmsk)
hdrindex=boolmsk.index[boolmsk == True].tolist()
print(hdrindex)
hdrstr=df.loc[hdrindex]
print(hdrstr)
df2=df.rename(columns=hdrstr)

Как использовать переменную для указания индекса, чтобы итоговый список можно было использовать в качестве заголовков столбцов?

1 Ответ

1 голос
/ 26 марта 2020

Полагаю, ваш индикатор фактических строк заголовка в кадре данных - это строка "destination". Давайте найдем, где это:

start_tag = df.eq("destination").any(1)

Мы сохраним номер индекса первого появления слова «назначение» для дальнейшего использования:

start_row = df.loc[start_tag].index.min()

Используя номер индекса, мы будем получить список значений в строке заголовка:

new_col_names = df.iloc[start_row].values.tolist()

И здесь мы можем назначить новые имена столбцов для фрейма данных:

df.columns = new_col_names

Отсюда вы можете играть с новым фреймом данных, фактическим имена столбцов и правильная индексация:

df2 = df.iloc[start_row+1:].reset_index(drop=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...