12 python numpy dataframe pandas
在Python中将pandas DataFrame列彼此分开时,处理零分母的最佳方法是什么?例如:
df = pandas.DataFrame({"a": [1, 2, 0, 1, 5], "b": [0, 10, 20, 30, 50]})
df.a / df.b # yields error
Run Code Online (Sandbox Code Playgroud)
我想将分母为零的比率注册为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
Run Code Online (Sandbox Code Playgroud)
我怎么能只为特定列而不是整个df做到这一点?
Jef*_*eff 23
你需要在浮点数工作,否则你将有整数除法,不是你想要的
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
Run Code Online (Sandbox Code Playgroud)
这是一种方式
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
Run Code Online (Sandbox Code Playgroud)
这是另一种方式
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
Run Code Online (Sandbox Code Playgroud)