В этой строке:
a = df.columns.str.startswith('Name')
df.columns будет [2, 3, 4, 5, 6, 7], потому что это имена ваших столбцов. так что это неправильно. В настоящее время Имя не находится в заголовках столбцов, это просто значение в столбце с именем '2', вместо этого вы можете сделать:
a = df[df['2'].str.startswith('Name', na=False)]
df.columns = a.tolist()
#you should be sure you only have exactly 1 occurrence of 'Name'
после установки столбцов с помощьюжелаемые имена, вы должны удалить строку с такими именами, как это:
df = df.drop(df['2'].str.startswith('Name', na=False).index)
Так что вам нужно запустить начинается с в столбце с именем «2» (который создает логическую маску) вВаш код 2. у вас похожая проблема, .loc используется для выбора данных на основе меток, но в настоящее время «Имя» не является меткой столбца или индекса, это просто значение.
Это может быть полезно, если вычитайте о столбцах и индексах на пандах и используя условные выражения для создания логических масок, их много, я нашел одну хорошую ссылку: основы панд