блок `try` /` кроме` в пандах не работает - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь применить функцию к pandas кадру данных.В моей функции есть блок try/except для перехвата исключений, таких как ZeroDivisionError, но он не работает.

Фрейм данных содержит более 100 столбцов.И фактическая функция должна применяться к каждой строке путем выбора подмножества столбцов

Ниже приведен мой код

Функция:

import pandas as pd
import numpy as np

def d(x):
    x0=22/7
    try:
        return x0/x
    except:
        return 0

df=pd.DataFrame({'a':[0,2,3,4],'b':[0,3,4,5]})
df

Out[174]: 
   a  b
0  0  0
1  2  3
2  3  4
3  4  5

После применения функциикак

df.apply(lambda x:d(x))

Out[173]: 
          a         b
0       inf       inf
1  1.571429  1.047619
2  1.047619  0.785714
3  0.785714  0.628571

Ожидается 0 вместо inf по индексу 0

Out[173]: 
          a         b
0  0.000000  0.000000
1  1.571429  1.047619
2  1.047619  0.785714
3  0.785714  0.628571

Может кто-нибудь сообщить мне, что я здесь упускаю.Это расстраивает ....: @

Ответы [ 2 ]

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

Вот альтернатива, которая будет быстрее, чем использование apply, если ваш реальный набор данных очень большой:

import math
import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [0, 2, 3, 4], 'b': [0, 3, 4, 5]})
df = (math.pi / df).replace(np.inf, 0)

Результаты:

          a         b
0  0.000000  0.000000
1  1.570796  1.047198
2  1.047198  0.785398
3  0.785398  0.628319
0 голосов
/ 16 ноября 2018

Укажите столбец:

df[0].apply(lambda x : d(x))

Из:

0    0.000000
1    3.142857
2    1.571429
3    1.047619
4    0.785714
Name: 0, dtype: float64

Для всего набора данных используйте: df.applymap (d)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...