Ответ принят. У меня была связанная, но немного другая ситуация, когда мне приходилось заполнять форму, но только внутри групп. Если у кого-то есть такая же потребность, знайте, что fillna работает над объектом DataFrameGroupBy.
>>> example = pd.DataFrame({'number':[0,1,2,nan,4,nan,6,7,8,9],'name':list('aaabbbcccc')})
>>> example
name number
0 a 0.0
1 a 1.0
2 a 2.0
3 b NaN
4 b 4.0
5 b NaN
6 c 6.0
7 c 7.0
8 c 8.0
9 c 9.0
>>> example.groupby('name')['number'].fillna(method='ffill') # fill in row 5 but not row 3
0 0.0
1 1.0
2 2.0
3 NaN
4 4.0
5 4.0
6 6.0
7 7.0
8 8.0
9 9.0
Name: number, dtype: float64
Автоинкремент будет использовать следующий доступный идентификатор для таблиц InnoDB и MyISAM.
Я тестировал это для MySQL 4.1.22, работающего в Windows Vista. Я создал две простые таблицы, один из которых использует InnoDB, а другой - с помощью MyISAM.
Я выполнил следующие команды (без ошибок):
INSERT INTO MyIsamTest (description) VALUES ('autoincrement id insert');
INSERT INTO MyIsamTest (id, description) VALUES (100, 'manual id insert');
INSERT INTO MyIsamTest (description) VALUES ('autoincrement id insert');
SELECT * FROM MyIsamTest;
Я получил сообщение об ошибке, следующий результат, который показывает, что столбец «id» был правильно автоинкремент:
+=====+=========================+
| id | description |
+=====+=========================+
| 1 | autoincrement id insert |
+-----+-------------------------+
| 100 | manual id insert |
+-----+-------------------------+
| 101 | autoincrement id insert |
+-----+-------------------------+
Я повторил эксперимент в моей таблице InnoDbTest с тем же результатом.
Автоинкремент будет использовать следующий доступный идентификатор для таблиц InnoDB и MyISAM, но вы можете вручную изменить его следующую позицию следующим образом:
После вашей вставки вы можете установить автоматическое приращение на значение выше самый высокий id:
ALTER TABLE tbl AUTO_INCREMENT = 9000;
MySQL не позволяет вам установить внутреннее значение auto_increment «value» ниже текущего максимального ID.
Поэтому, если вы добавляете 1000 строк, начинающихся с 5000, значение инкремента устанавливается равным 6000. Вы все еще могут добавлять строки с идентификаторами, которые еще не существуют (например, 4500), но это не стоит беспокоить. Есть много чисел от 6000 до 4 миллиардов.
Попробуйте в тестовой базе данных и посмотрите, что происходит, с лампой / xampp и т. д.
Если у вас есть только одна таблица устаревших без зависимостей от идентификаторов, то то, что я сделал бы, это создать временную таблицу для вставки всех ваших новых данных (с идентификаторами 5000+). Затем запустите это:
INSERT INTO `myrealtable` (column1, column2, column3)
SELECT column1, column2, column3
FROM `temptable`;
DROP TABLE `temptable`;
... где ни один из столбцов columnX не является основным идентификатором auto_increment.
Я считаю, что MySQL проверяет, вставляете ли вы в автоинкрементный столбец и обновляете AUTO_INCREMENT, чтобы AUTO_INCREMENT> MAX (id), но мне нужно просмотреть документы. Вы должны по-прежнему следовать за предложением Эндрю Даффи, чтобы быть в безопасности.
Если вы вставляете данные с уже назначенными первичными ключами в MyISAM, значение столбца AUTO_INCREMENT для следующей вставки будет max (столбец) + 1, поэтому он будет работать.
Однако вы не используя MyISAM, так как это важные данные, вы используете InnoDB, которому требуется оператор ALTER TABLE, указанный выше.