Проблема с Postgres ALTER TABLE

Чтобы получить более ясность, давайте посмотрим на DataFrame с двумя уровнями в его индексе (MultiIndex).

index = pd.MultiIndex.from_product([['TX', 'FL', 'CA'], 
                                    ['North', 'South']], 
                                   names=['State', 'Direction'])

df = pd.DataFrame(index=index, 
                  data=np.random.randint(0, 10, (6,4)), 
                  columns=list('abcd'))

Метод reset_index, вызываемый параметрами по умолчанию, преобразует все индексы в столбцы и использует простой RangeIndex в качестве нового индекса.

df.reset_index()

Используйте параметр level для управления тем, какие уровни индексов преобразуются в столбцы. Если возможно, используйте имя уровня, которое является более явным. Если имена уровней отсутствуют, вы можете ссылаться на каждый уровень по его целочисленному местоположению, которое начинается с 0 извне. Вы можете использовать скалярное значение здесь или список всех индексов, которые вы хотели бы сбросить.

df.reset_index(level='State') # same as df.reset_index(level=0)

В редком случае, когда вы хотите сохранить индекс и превратить индекс в столбец, вы можете сделать следующее:

# for a single level
df.assign(State=df.index.get_level_values('State'))

# for all levels
df.assign(**df.index.to_frame())

30
задан martin.malek 14 July 2010 в 06:34
поделиться

1 ответ

Я столкнулся с этой проблемой и не нашел способа ее решить. К сожалению, насколько я могу судить, нужно отбросить представления, изменить тип столбца в базовой таблице, а затем воссоздать представления. Это может произойти полностью за одну транзакцию.

Отсрочка ограничения не применяется к этой проблеме. Другими словами, даже SET CONSTRAINTS ALL DEFERRED не влияет на это ограничение. Чтобы быть конкретным, отсрочка ограничения не применяется к проверке согласованности, которая выводит ОШИБКА: невозможно изменить тип столбца, используемого представлением или правилом , когда кто-то пытается изменить тип столбца, лежащего в основе представления.

23
ответ дан 27 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: