如何摆脱 python pandas 中的除以零错误?
How to get rid of Divide by Zero error in python pandas?
我有一个包含两列的数据框:
df
有一些科学价值,例如 0E-10
,我想创建一个新列,这样:
df["new_col"]=df["fruits_ratio"]/(df["fruits_ratio"]+df["vegetables_ratio"])
但是它给我这样的错误:
DivisionByZero: [<class 'decimal.DivisionByZero'>]
有没有办法替换 0-E10
值或如何避免错误?
谢谢
我认为 float 函数会为您解决这个问题 float()
。将整个列分配为浮点数,因为大多数已经是浮点数。
给定:
df = pd.DataFrame({'a':[0,1,2,3,0,1,2,3], 'b':[0,1,0,1,1,0,1,0]})
作为
a b
0 0 0
1 1 1
2 2 0
3 3 1
4 0 1
5 1 0
6 2 1
7 3 0
创建一个掩码来识别 a
或 b
不为零的位置,这是可以安全计算的。
mask = (df['a'] != 0) | (df['b'] != 0)
面具
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
用NaN
填充结果列然后覆盖你可以计算的:
df['c'] = pd.np.NaN
df.loc[mask, 'c'] = df['a'] / (df['a'] + df['b'])
结果
a b c
0 0 0 NaN
1 1 1 0.500000
2 2 0 1.000000
3 3 1 0.750000
4 0 1 0.000000
5 1 0 1.000000
6 2 1 0.666667
7 3 0 1.000000
应用于您的问题:
mask = (df['fruits_ratio'] != 0) | (df['vegetables_ratio'] != 0)
df['new_col'] = pd.np.NaN
df.loc[mask, 'new_col'] = df['fruits_ratio'] / (df['fruits_ratio'] + df['vegetables_ratio'])
我有一个包含两列的数据框:
df
有一些科学价值,例如 0E-10
,我想创建一个新列,这样:
df["new_col"]=df["fruits_ratio"]/(df["fruits_ratio"]+df["vegetables_ratio"])
但是它给我这样的错误:
DivisionByZero: [<class 'decimal.DivisionByZero'>]
有没有办法替换 0-E10
值或如何避免错误?
谢谢
我认为 float 函数会为您解决这个问题 float()
。将整个列分配为浮点数,因为大多数已经是浮点数。
给定:
df = pd.DataFrame({'a':[0,1,2,3,0,1,2,3], 'b':[0,1,0,1,1,0,1,0]})
作为
a b
0 0 0
1 1 1
2 2 0
3 3 1
4 0 1
5 1 0
6 2 1
7 3 0
创建一个掩码来识别 a
或 b
不为零的位置,这是可以安全计算的。
mask = (df['a'] != 0) | (df['b'] != 0)
面具
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
用NaN
填充结果列然后覆盖你可以计算的:
df['c'] = pd.np.NaN
df.loc[mask, 'c'] = df['a'] / (df['a'] + df['b'])
结果
a b c
0 0 0 NaN
1 1 1 0.500000
2 2 0 1.000000
3 3 1 0.750000
4 0 1 0.000000
5 1 0 1.000000
6 2 1 0.666667
7 3 0 1.000000
应用于您的问题:
mask = (df['fruits_ratio'] != 0) | (df['vegetables_ratio'] != 0)
df['new_col'] = pd.np.NaN
df.loc[mask, 'new_col'] = df['fruits_ratio'] / (df['fruits_ratio'] + df['vegetables_ratio'])