Pandas / Dataframe: Как назначить значение по умолчанию в случае сбоя условия при получении значения одной ячейки из фрейма данных с использованием python? - PullRequest
0 голосов
/ 02 марта 2019

Давайте рассмотрим следующий код:

import pandas as pd 
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=["A", "B"])

x=0

print(df)

x=df.loc[df['A'] == 3, 'B', ''].iloc[0]
print(x)

во время печати x, я получаю 4 в качестве вывода. Хорошо.Если условие не выполнено в соответствии с приведенным ниже кодом

x=df.loc[df['A'] == 33, 'B', ''].iloc[0]

Я хочу напечатать начальное значение х 0 и хочу избежать ошибки ниже:

IndexError: одиночный позиционный индексаторвыходит за пределы

Помогите мне избежать ошибки и отобразите начальное значение x.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вы можете взглянуть на попытку и, кроме обработки исключений, Использовать:

import pandas as pd 
df = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8]], columns=["A", "B"])

x=0

print(df)

try:
    x=df.loc[df['A'] == 3, 'B', ''].iloc[0]
    print(x)
except Exception as e:
    print(e)
    print(x)

Вывод:

   A  B
0  1  2
1  3  4
2  5  6
3  7  8

Too many indexers #the exception

0 #the initial value
0 голосов
/ 02 марта 2019

Используйте next с параметром по умолчанию для получения значения, если нет условий совпадения:

Примечание. Также имеется другая ошибка - нужно только значение B, удалить '' (возможно, опечатка)

default=0
x = next(iter(df.loc[df['A'] == 30, 'B']), default)
print (x)
0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...