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