Pandas 用另一列安全地分隔列(零、无、str)

Pandas 用另一列安全地分隔列(零、无、str),pandas,dataframe,Pandas,Dataframe,如何将一列除以另一列0和str safe? 出于某种原因,我不想创建没有零和str的新“A”和“B”列。如果分离是不可能的,我想一无所有 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

如何将一列除以另一列0和str safe? 出于某种原因,我不想创建没有零和str的新“A”和“B”列。如果分离是不可能的,我想一无所有

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`

使用
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)