在Python中处理pandas DataFrames列分区中的零

2024-05-16 22:10:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,将pandas数据帧列彼此分隔时,处理零分母的最佳方法是什么?例如:

df = pandas.DataFrame({"a": [1, 2, 0, 1, 5], "b": [0, 10, 20, 30, 50]})
df.a / df.b  # yields error

我希望分母为零的比率注册为NA(numpy.nan)。如何在熊猫身上有效地做到这一点?

转换为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呢?


Tags: 数据方法innumpydataframepandasdferror
1条回答
网友
1楼 · 发布于 2024-05-16 22:10:51

你需要在浮点运算,否则你将有整数除法,可能不是你想要的

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

相关问题 更多 >