Добавьте два целых столбца вместе, избегая строк и Nan - PullRequest
1 голос
/ 21 октября 2019

Я пытаюсь добавить два столбца вместе, которые имеют nans и строки. Я также пытаюсь использовать больше векторизации.

Это не проблема, но мой метод выглядит немного грязно.

Мне просто не нравится внешний вид try except. Это единственный способ избежать ошибок при добавлении strings, ints и nans вместе. Это нормально использовать try, кроме как таким образом, или есть более питонический способ? Может ли это замедлить мою векторизацию?

Вот оно:

import pandas as pd

d = pd.DataFrame({'col1':[1,2,3,'string',4,pd.np.nan],
                 'col2':['string2',4,5,pd.np.nan,6,8]})
print(d)

     col1     col2
0       1  string2
1       2        4
2       3        5
3  string      NaN
4       4        6
5     NaN        8

Функция добавления строк:

def addition(col1,col2):
    sums = []
    for num1, num2 in zip(col1,col2):
        try:
            sums.append(int(num1)+int(num2))
        except:
            sums.append(pd.np.nan)
    return sums

d['col3'] = addition(d.col1,d.col2)

И я получил ожидаемый результат:

     col1     col2  col3
0       1  string2   NaN
1       2        4   6.0
2       3        5   8.0
3  string      NaN   NaN
4       4        6  10.0
5     NaN        8   NaN

Мой вопрос: это нормально использовать try except, как это? Есть ли менее noob способ избежать ошибок?

1 Ответ

3 голосов
/ 21 октября 2019

Другой способ - использовать pandas.to_numeric() с errors='coerce'

d['col3'] = pd.to_numeric(d['col1'], errors='coerce') + \
            pd.to_numeric(d['col2'], errors='coerce')
print(d)
#     col1     col2  col3
#0       1  string2   NaN
#1       2        4   6.0
#2       3        5   8.0
#3  string      NaN   NaN
#4       4        6  10.0
#5     NaN        8   NaN

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

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