панды безопасно разделяют колонку на другую (нули, нет, ул.) - PullRequest
1 голос
/ 19 марта 2019

Как разделить один столбец на другой ноль и str безопасно? Я не хочу создавать новые столбцы «A» и «B» без нуля и нуля по некоторым причинам. Если отделение не возможно, я хочу получить Nones.

df = pd.DataFrame({'A': [0, None, 2, 1 ,5], 'B': [1, 3,'', 'cat', 4]})

Я пытаюсь:

df['C'] = df['B'].divide(df['A'], fill_value=None) # error with zero devision

На самом деле, это работает, но, может быть, есть более элегантный способ?

`df['C'] = df.apply(lambda row: row['B']/row['A'] if isinstance(row['A'], numbers.Number) and isinstance(row['B'], numbers.Number) and row['A'] != 0 else None, axis = 1) # this works perfectly but looks ugly`

1 Ответ

1 голос
/ 19 марта 2019

Используйте pd.to_numeric для принудительного вызова нечисловых типов:

import pandas as pd
import numpy as np

df['C'] = pd.to_numeric(df['B'], errors='coerce').divide(pd.to_numeric(df['A'], errors='coerce'))

#     A    B    C
#0  0.0    1  inf
#1  NaN    3  NaN
#2  2.0       NaN
#3  1.0  cat  NaN
#4  5.0    4  0.8

Если вы не хотите np.inf, тогда:

df['C'] = df.C.replace(np.inf, np.NaN)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...