Панды выдают ошибку при умножении на нан - PullRequest
0 голосов
/ 30 ноября 2018

Я бы хотел, чтобы панды выдавали ошибку при попытке выполнить арифметику с использованием ячеек со значениями nan.Поэтому, если я создам фиктивный объект DataFrame:

test_input = pd.DataFrame(columns=['a','b','c'],
                          index=[1,2],
                          data=[[np.nan, np.nan, 2.0],[np.nan, 1.0, 3.0]])

, который выглядит следующим образом:

enter image description here

Если я умножу это на несколькодругой набор значений, он умножает действительные записи в DataFrame и просто оставляет NaN такими, какими они являются:

test_input * np.array([2,2,2])

enter image description here

Принимая во внимание, чтонапример, выдает ошибку, когда пытается выполнить арифметику в ячейке, содержащей NaN.

Я пытался использовать .fillna для замены NaN на None (насколько я могу видеть, могу 'это будет сделано, потому что fillna думает, что вы не ввели значение) и заменив NaN на строки (что выдает ошибку, если вы попытаетесь умножить на float, но не на int), но мне было интересно, есть ли более очевидный методчто мне не хватает?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Я не верю, что есть встроенный способ сделать это, и я даже не уверен, что ваши намерения имеют смысл.

Однако вы можете определить свою собственную функцию умножения и просто повыситьошибки, если в вашем фрейме данных есть нули.

def mul(df, n):
    if df.isnull().any().any(): raise ValueError('Error - Custom Message')
    return df*n

И использовать как

mul(df, 2)
0 голосов
/ 30 ноября 2018

NaN значения имеют тип float.Как таковые, они отлично работают с арифметическими операциями в Pandas / NumPy.Вам придется переопределить методы Pandas / NumPy, чтобы достичь своей цели. Это не рекомендуется.

Вместо этого просто выполните явную проверку перед вычислением:

assert test_input.notnull().values.all()  # AssertionError if null value exists
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...