обработка исключений на основе определенного столбца фрейма данных - PullRequest
1 голос
/ 17 апреля 2019

У меня есть фрейм данных следующим образом:

enter image description here

Теперь я хочу разделить значения x на y без исключения.Например, когда я делю 3 на 2, это должно дать мне 1,5, а когда я делю 3 на 0, это должно дать мне ноль.Чтобы добиться этого, я написал исключительную функцию

def divide(x,y):
    try:
        result = x/y
        print (result)
    except ZeroDivisionError:
        print (0)

Теперь я хочу создать новый столбец во фрейме данных и применить эту функцию.До сих пор я использовал:

df['num']  = df.apply(divide)

Но это не дает мне требуемого результата.Может ли кто-нибудь помочь

Ответы [ 3 ]

2 голосов
/ 17 апреля 2019

Вы также можете попробовать:

def divide(df):
    if(df['y']!=0):
        return df['x']/df['y']
    else:
        return 0
df['num']=df.apply(divide,axis=1)

Но я бы предложил использовать это вместо:

import numpy as np
df['num']=df['x']/df['y']
df.replace(np.inf,0)
1 голос
/ 17 апреля 2019

Попробуйте:

, если вы используете Python 2.7, тогда return x / float (y)

import math

def divide(x,y):
        # if you check type(y) or type(x) you will get type: numpy.float64
        # pandas internally converts it to a numpy.float64
        # when you do division on such values you will get inf as output
        # you can check if values are not zero and do calculations or convert it to float like: x / float(y)

        if y and not math.isnan(y):
            return x/y

df['num']  = df.apply(lambda row: divide(row["x"], row["y"]), axis=1)

0 голосов
/ 17 апреля 2019

Вам нужно return материал, а не print материал, чтобы он не только отображался, но и сохранялся в памяти:

def divide(x,y):
    try:
        return x/y
    except ZeroDivisionError:
        return 0

df['num'] = df.apply(lambda x: divide(x["x"], x["y"]), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...