Если вы хотите преобразовать свою серию в целые идентификаторы, вы можете использовать pd.factorize
.
Обратите внимание, что это решение, в отличие от pd.Categorical
, не будет сортироваться в алфавитном порядке. Таким образом, первая страна будет назначена 0
. Если вы хотите начать с 1
, вы можете добавить константу:
df['code'] = pd.factorize(df['cc'])[0] + 1
print(df)
cc temp code
0 US 37.0 1
1 CA 12.0 2
2 US 35.0 1
3 AU 20.0 3
Если вы хотите сортировать в алфавитном порядке, укажите sort=True
:
df['code'] = pd.factorize(df['cc'], sort=True)[0] + 1
. Для целей совместимости PDO будет только emulate подготовленным операциям, заменив заполнители фактическими данными вместо их отправки на сервер отдельно, если не указано иное. И с «ленивой» привязкой (используя массив в execute ()), PDO будет обрабатывать каждый параметр как строку. В результате подготовленный LIMIT ?,?
запрос становится LIMIT '10', '10'
, который является недопустимым синтаксисом, который вызывает запрос.
Эта проблема может быть решена либо
$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
$stm = $pdo->prepare('SELECT * FROM table LIMIT ?, ?');
$stm->bindValue(1, $limit_from,PDO::PARAM_INT);
$stm->bindValue(2, $per_page,PDO::PARAM_INT);
$stm->execute();
$data = $stm->fetchAll();
Подготовленный оператор может представлять только полный литерал данных. Не является частью литерального, не сложного выражения или идентификатора. Но только строка или номер. Итак, очень распространенная ошибка - это такой запрос:
$sql = "SELECT * FROM t WHERE column LIKE '%?%'";
Если вы немного поразмышляете над этим вопросом, вы поймете, что, находясь внутри одинарных кавычек, вопросительный знак становится буквальным вопросительным знаком , без особого значения для подготовленных заявлений.
Итак, нужно отправить полный строковый литерал с помощью подготовленного оператора. Существует два возможных способа:
$name = "%$name%";
$stm = $pdo->prepare("SELECT * FROM table WHERE name LIKE ?");
$stm->execute(array($name));
$data = $stm->fetchAll();
$sql = "SELECT * FROM t WHERE column LIKE concat('%',?,'%')";
, хотя последнее кажется слишком раздутым.
%
, _
и любых других поддерживаемых движком подстановочных знаков в $name
перед тем, как поместить его в запрос.
– DCoder
13 April 2013 в 19:42
addcslashes($name, '%_\\');
.
– Alix Axel
3 June 2013 в 14:24