Установить кортеж в качестве имени столбца в Pandas

1

Я пытаюсь установить имя столбца pandas в кортеж. Небольшое уведомление: имя столбца уже является кортежем, который я пытаюсь заменить другим кортежем. введите описание изображения здесь Я пробовал этот tab.rename(columns = {valeur[0]: cle}, inplace = True ) 'cle' - это мой новый набор (6, 9) и 'valeur [0]' - это имя столбца (7,25, 7,35).

Я получаю сообщение об ошибке: "Имена должны быть похожими на список для MultiIndex"

Спасибо :)

Теги:
pandas
dataframe
tuples

2 ответа

3

Вы можете сделать это:

import pandas as pd

df = pd.DataFrame([[0, 0], [0, 0], [1, 1]], columns=[(7.25, 7.35), (7.35, 7.5)])
new_cols = df.columns.values.copy()
new_cols[0] = (6, 9)
df.columns = new_cols
print(df)

Выход:

   (6, 9)  (7.35, 7.5)
0       0            0
1       0            0
2       1            1
  • 0
    Также, возможно, кто-то с более глубоким знанием Pandas может прокомментировать, действительно ли модификация и индексирование непосредственно через .values допустимы. Я не нашел никаких ссылок на обратное, поэтому я предполагаю, что это так.
  • 1
    Вы не должны изменять значения напрямую. Я обнаружил, что это вызывает проблемы сумасшедшими способами, которые вы не могли бы себе представить, если бы вы не написали источник Pandas. Копия в порядке +1.
Показать ещё 2 комментария
1

Это известная проблема: возможность подавить автоматическое преобразование кортежей в MultiIndex.

Комментарий от основного разработчика:

Вы можете сделать это, но использование кортежей в качестве индекса ОЧЕНЬ неудобно и едва поддерживается. Они гораздо более естественно представлены (и исполнены) как MultiIndexes. Я никогда не видел случая, когда это на самом деле хорошая идея.

Предлагаемое решение в этой теме предполагает использование tupleize_cols=False:

tab = pd.DataFrame([[1], [2], [3]], columns=[(7.25, 7.35)])

valeur = [(7.25, 7.35)]
cle = (6, 9)

tab.columns = pd.Index([i if i != valeur[0] else cle for i in tab],
                       tupleize_cols=False)

print(tab)

   (6, 9)
0       1
1       2
2       3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню