在Python中将熊猫DataFrame列彼此分开时,处理零分母的最佳方法是什么?例如:
df = pandas.DataFrame({"a": [1, 2, 0, 1, 5], "b": [0, 10, 20, 30, 50]}) df.a / df.b # yields error
我希望分母为零的比率被注册为NA(numpy.nan)。在大熊猫中如何有效地做到这一点?
numpy.nan
强制转换为float64在列级别上不起作用:
float64
In [29]: df Out[29]: a b 0 1 0 1 2 10 2 0 20 3 1 30 4 5 50 In [30]: df["a"].astype("float64") / df["b"].astype("float64") ... FloatingPointError: divide by zero encountered in divide
如何仅针对特定列而不是整个df做到这一点?
您需要使用浮点数,否则您将获得整数除法,可能不是您想要的
In [12]: df = pandas.DataFrame({"a": [1, 2, 0, 1, 5], "b": [0, 10, 20, 30, 50]}).astype('float64') In [13]: df Out[13]: a b 0 1 0 1 2 10 2 0 20 3 1 30 4 5 50 In [14]: df.dtypes Out[14]: a float64 b float64 dtype: object
这是一种方法
In [15]: x = df.a/df.b In [16]: x Out[16]: 0 inf 1 0.200000 2 0.000000 3 0.033333 4 0.100000 dtype: float64 In [17]: x[np.isinf(x)] = np.nan In [18]: x Out[18]: 0 NaN 1 0.200000 2 0.000000 3 0.033333 4 0.100000 dtype: float64
这是另一种方式
In [20]: df.a/df.b.replace({ 0 : np.nan }) Out[20]: 0 NaN 1 0.200000 2 0.000000 3 0.033333 4 0.100000 dtype: float64