Имена столбцов (которые являются строками) не могут быть нарезаны так, как вы пытались.
Здесь у вас есть несколько вариантов. Если вы знаете из контекста, какие переменные вы хотите вырезать, вы можете просто вернуть представление только этих столбцов, передав список в синтаксис __getitem__
([]].
df1 = df[['a','b']]
В качестве альтернативы, если важно индексировать их численно, а не их именем (скажем, ваш код должен автоматически сделать это, не зная имена первых двух столбцов), вы можете сделать это вместо этого:
df1 = df.iloc[:,0:2] # Remember that Python does not slice inclusive of the ending index.
Кроме того, вы должны ознакомиться с идеей представления объекта Pandas против копии этого объекта. Первый из вышеперечисленных методов вернет новую копию в память желаемого субобъекта (нужные фрагменты).
Иногда, однако, в Pandas существуют соглашения об индексировании, которые не делают этого и вместо этого дают вам новую переменную, которая относится только к той же части памяти, что и субобъект или фрагмент исходного объекта , Это произойдет со вторым способом индексирования, поэтому вы можете изменить его с помощью функции copy()
, чтобы получить обычную копию. Когда это происходит, изменение того, что вы думаете, нарезанный объект, может иногда изменять исходный объект. Всегда хорошо смотреть на это.
df1 = df.iloc[0,0:2].copy() # To avoid the case where changing df1 also changes df
Согласно docs , **
имеет более высокий приоритет, чем -
, поэтому ваш код эквивалентен -(2 ** 2)
. Чтобы получить желаемый результат, вы можете поместить -2
в круглые скобки
>>> (-2) ** 2
4
или использовать встроенную функцию pow
>>> pow(-2, 2)
4
или math.pow
(возвращающее значение float
)
>>> import math
>>> math.pow(-2, 2)
4.0
вы также можете использовать математическую библиотеку ...
math.pow(-2,2) --> 4
-math.pow(2,2) --> -4
math.pow(4,0.5) --> 2
У Python есть проблема и не видит -2 как число. Это, кажется, по дизайну, как указано в документах.
-2 интерпретируется как - (2) {унарный минус до положительного числа 2}
Это обычно не задайте проблему, но в -a ** 2 ** имеет более высокий приоритет как - и, следовательно, с - интерпретируется как унарный оператор вместо части числа -2 ** 2, оценивает -2 вместо 2.
Операция **
выполняется до минуса. Чтобы получить ожидаемые результаты, вы должны сделать
print ((-2) ** 2)
Таким образом, в несравненной последовательности мощности и унарной операторы, операторы оцениваются справа налево (это не ограничивает порядок оценки для операндов):
blockquote>-1**2
приводит к-1
.Полная деталь приоритет операторов также доступен в документации. Вы можете видеть, что последняя строка -
(expr)
, которая заставляет expr оцениваться перед использованием, поэтому результат(-2) ** 2 = 4