iloc
работает на основе целочисленного позиционирования. Поэтому, независимо от того, какие метки ярлыков вы можете, например, получить первую строку, выполнив
df.iloc[0]
или последние пять строк, выполнив
df.iloc[-5:]
. Вы можете также используйте его на столбцах. Это извлекает третий столбец:
df.iloc[:, 2] # the : in the first position indicates all rows
Вы можете комбинировать их для получения пересечений строк и столбцов:
df.iloc[:3, :3] # The upper-left 3 X 3 entries (assuming df has 3+ rows and columns)
С другой стороны, .loc
используют именованные индексы. Давайте создадим кадр данных со строками в виде ярлыков строк и столбцов:
df = pd.DataFrame(index=['a', 'b', 'c'], columns=['time', 'date', 'name'])
Затем мы можем получить первую строку по
df.loc['a'] # equivalent to df.iloc[0]
, а вторую две строки в 'date'
столбца
df.loc['b':, 'date'] # equivalent to df.iloc[1:, 1]
и т. д. Теперь, вероятно, стоит отметить, что индексы строк и столбцов по умолчанию для DataFrame
являются целыми числами от 0, и в этом случае iloc
и loc
будут работать одинаково. Вот почему ваши три примера эквивалентны. Если у вас был нечисловой индекс, такой как строки или даты, df.loc[:5]
вызовет ошибку.
Кроме того, вы можете выполнить поиск столбцов только с помощью фрейма данных __getitem__
:
df['time'] # equivalent to df.loc[:, 'time']
Теперь предположим, что вы хотите смешать позицию и названную индексацию, то есть индексирование с использованием имена в строках и позициях в столбцах (чтобы уточнить, я имею в виду выбор из нашего фрейма данных, а не создание фрейма данных со строками в индексе строки и целых чисел в индексе столбца). Вот где .ix
приходит:
df.ix[:2, 'time'] # the first two rows of the 'time' column
EDIT: Я думаю, что также стоит упомянуть, что вы можете передавать логические векторы в метод loc
. Например:
b = [True, False, True]
df.loc[b]
Вернет 1-ю и 3-ю строки df
. Это эквивалентно df[b]
для выбора, но его также можно использовать для назначения через логические векторы:
df.loc[b, 'name'] = 'Mary', 'John'
Нет, обработка исключений предназначена для обработки, а также исключительных обстоятельств. Я бы предположил, что примеры, которые вы видите, не завершены. Запись / печать трассировки стека на System.err
может быть хорошей идеей, но на самом деле это не всегда необходимо (хотя и неоценимо при попытке отладки вашего кода), и это конечно not вся обработка исключений используется для.
Например, скажем, у вас есть программа, которая анализирует ввод, который пользователь помещает в текстовое поле:
int userValue = Integer.parseInt(textBox.getText());
Что произойдет, если пользователь вводит письмо? Ну, это исключительное условие - parseInt()
пытается разобрать целое число, так что в мире это будет делать с письмом? Таким образом, исключительное условие запускает NumberFormatException
. Здесь правильный способ справиться с этим исключением, вероятно, заключался бы в том, чтобы предупредить пользователя о том, что его ввод недействителен.
Что касается вопроса 2, вы можете получить ArithmeticExceptions
при попытке создать BigDecimal
, десятичное представление которого не заканчивается:
BigDecimal a = new BigDecimal("1").divide(new BigDecimal("3"));
Если память используется, это должно вызывать ArithmeticException
...
Обработка исключений в Java - это управление ошибками. Это способ изящно обрабатывать ошибки в ваших программах. Например, вы можете использовать Integer.parseInt () для преобразования строки в целое число. Он выдает исключение NumberFormatException, если он не может проанализировать строку. В этом случае вы можете поймать исключение, по умолчанию значение и отобразить соответствующее сообщение пользователю. И ваша программа будет более надежной и элегантной.
Нет, обработка исключений не связана с печатью сообщения или причиной исключения, хотя они необходимы для выяснения причин исключения в первую очередь.
Обработка исключений действительно более ориентирована нам известно, что в жизненном цикле программы могут возникать странные вещи, и в зависимости от типа «странной вещи», которая появляется во время прогона, мы можем надеяться на ее восстановление.
Возьмите, для Например, ваш ArithmeticException
. Это исключение, которое возникает, когда какая-то часть приложения решает что-то делить на ноль или по другим причинам (другие классы могут это бросить, вам придется прочитать документацию и выяснить, почему). Java решает, что он не может разумно восстановить из этого, поэтому он выдает исключение во время выполнения или исключение, которое обычно не предназначено для улавливания.
Я рекомендую вам взглянуть на Исключения Trail из Oracle, поскольку это предоставит бесценные знания о том, каковы разные типы исключений. Просто обратите внимание, что если у вас есть исключение в коде, лучше изучить причину , а не ловить его (и / или подавить).