NumPy 中 DataFrame.div 和 DataFrame.divide 在 Pandas 中的区别
在本文中,我们将介绍 Pandas 里的两个关于 DataFrame 的方法——DataFrame.div 和 DataFrame.divide 之间的差异。
阅读更多:Numpy 教程
DataFrame.div
使用 DataFrame.div 函数时,我们可以将一组数据除以另一组数据,例如:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'A': [10, 20, 30], 'B': [10, 10, 10], 'C': [10, 20, 30]})
df2 = pd.DataFrame({'A': [1, 2, 3], 'B': [1, 2, 3], 'C': [1, 2, 3]})
df1.div(df2)
这段代码输出:
A B C
0 10.0 10.0 10.0
1 10.0 5.0 10.0
2 10.0 3.333333 10.0
其中 df1 和 df2 中的每一项相除得到了一个新的 DataFrame,我们可以看到:
- 0 行的数据是
df1和df2中对应数据相除得到的; - 1 行的数据是
df1中 B 列和df2中 B 列对应数据的相除; - 2 行的数据是
df1中 B 列和df2中 B 列对应数据的相除,但数据类型是 float。
DataFrame.divide
DataFrame.divide 函数与 DataFrame.div 函数非常相似,不同之处在于,DataFrame.divide 接受额外的参数。
举个例子:
df1.divide(df2, fill_value=0)
这会得到:
A B C
0 10.0 10.0 10.0
1 10.0 5.0 10.0
2 10.0 3.333333 10.0
这个结果和使用 DataFrame.div 得到的结果是一样的。
但是,不同之处在于我们可以提供一个 fill_value 参数。如果 df2 中有缺失值,我们可以使用 fill_value 参数来代替。举个例子:
df2 = pd.DataFrame({'A': [1, 2, np.nan], 'B': [1, np.nan, 3], 'C': [np.nan, np.nan, np.nan]})
df1.divide(df2, fill_value=0)
这段代码将输出:
A B C
0 10.00 10.00 0.0
1 10.00 0.00 NaN
2 inf 3.333333 NaN
在这里,我们可以看到,df2 中有缺失数据,但我们使用了 fill_value=0,所以我们得到了非常好的结果。
总结
尽管 DataFrame.div 和 DataFrame.divide 中的参数略有不同,但它们的用法都非常类似,就是将一个 DataFrame 中的一组数据除以另一组数据。在使用时,我们可以根据情况选择使用哪一个函数,并且可以根据方法提供的选项参数自定义计算方法。
极客笔记