#pandas #rename
#pandas #переименовать
Вопрос:
Это столбцы моего фрейма данных:
col_list= df1.columns
Out:
Index([ nan, nan, 'Estimate',
'Margin of Error', 'Percent', 'Margin of Error',
'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error',
'Percent', 'Margin of Error', 'Estimate',
'Margin of Error', 'Percent', 'Margin of Error',
'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error',
'Percent', 'Margin of Error', 'Estimate',
'Margin of Error', 'Percent', 'Margin of Error',
'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error',
'Percent', 'Margin of Error', 'Estimate',
'Margin of Error', 'Percent', 'Margin of Error'],
dtype='object', name=3)
Я пытаюсь переименовать имена первых двух столбцов:
df2= df1.rename(columns={df1.columns[0]:'State', df1.columns[1]:'coverage'})
Но оба столбца переименовываются в ‘coverage’
Однако, когда я пытаюсь просмотреть имена отдельных столбцов, такие как:
col[0]
Out: nan
col[1]
Out:nan
col[3]
Out: 'Estimate'
Он восстанавливает правильные позиции.
Даже когда я пытаюсь переименовать только первые столбцы как,
df2= df1.rename(columns={df1.columns[0]:'State'})
Имена первых столбцов изменяются на ‘State’:
Index(['State', 'State', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
'Margin of Error'],
dtype='object', name=3)
Не уверен, что здесь происходит.
Комментарии:
1. Первые два столбца имеют nan в качестве столбца (одинаковое значение), решение, которое я бы вам предложил, — переназначить все столбцы, выполнив это df.columns = [‘State’, ‘coverage’] df.columns[2:]
Ответ №1:
В этой строке:
df2= df1.rename(columns={df1.columns[0]:'State', df1.columns[1]:'coverage'})
df1.columns[0]
и df1.columns[1]
получает значение имени 0-го 1-го столбца, которое является nan
для обоих. Таким образом, это эквивалентно:
df2= df1.rename(columns={'nan':'State', 'nan':'coverage'})
Поскольку клавиша ‘nan’ появляется дважды, второе назначение имеет приоритет.
Обходной путь заключается в переименовании всех столбцов одновременно:
col_list= df1.columns.to_list()
col_list[0] = 'State'
col_list[1] = 'coverage'
df1.columns = col_list
или однострочным (по предложению @IWHKYB):
df1.columns = ['State', 'coverage'] df1.columns[2:].to_list()
Комментарии:
1. df1.columns = [‘State’, ‘coverage’] df1.columns[2:] Выдал мне эту ошибку: ошибка значения: несоответствие длины: ожидаемая ось содержит 42 элемента, новые значения содержат 40 элементов. Кроме того, я ранее пробовал col_list[0]= ‘State’. Это привело к: TypeError: Index не поддерживает изменяемые операции, поэтому я просто использовал ту же логику и присвоил столбцам список: df1.columns = [‘Состояние’, ‘Охват’, ‘Оценка’, ‘Предел погрешности’, ‘Процент’, ‘Предел погрешности’, ‘Оценка’, ‘Предел погрешности’, ‘Процент’, ‘Предел погрешности’ …]
2. Ahh
Index
ведет себя не совсем как список. Отредактировано для добавленияto_list()
вызовов.