我有一个包含两个datetime64列的数据框:
In [119]: df.dtypes
Out[119]:
beg datetime64[ns]
end datetime64[ns]
dtype: object
有时,此数据框可能为空。在这种情况下,end
减去beg
的减法使用减号运算符失败,但使用sub
方法。
In [120]: df.end - df.beg
/Users/guillaumethomas/Documents/project/env3.4/lib/python3.4/site-packages/pandas/core/ops.py:450: PerformanceWarning: Adding/subtracting array of DateOffsets to Series not vectorized
PerformanceWarning)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-120-cb2fc6857acf> in <module>()
----> 1 df.end - df.beg
/Users/guillaumethomas/Documents/project/env3.4/lib/python3.4/site-packages/pandas/core/ops.py in wrapper(left, right, name, na_op)
607 rvalues = com.take_1d(rvalues, ridx)
608
--> 609 arr = na_op(lvalues, rvalues)
610
611 return left._constructor(wrap_results(arr), index=index,
/Users/guillaumethomas/Documents/project/env3.4/lib/python3.4/site-packages/pandas/core/ops.py in <lambda>(x, y)
452
453 # pass thru on the na_op
--> 454 self.na_op = lambda x, y: getattr(x,self.name)(y)
455 return lvalues, rvalues
456
TypeError: ufunc subtract cannot use operands with types dtype('<M8[ns]') and dtype('O')
这有效
In [121]: df.end.sub(df.beg)
Out[121]: Series([], dtype: timedelta64[ns])
根据documentation,sub
是“等同于series - other
,但支持将fill_value替换为其中一个输入中的缺失数据。”据我所知,它并没有解释行为的差异。我的问题是:
sub
方法和减号运算符之间有什么区别?sub
,add
等代替运营商是一种好习惯吗?就我而言,我优先考虑可预测性而不是可读性。我的环境:
答案 0 :(得分:0)
在您复制粘贴的文档和句子中回答:
但支持将fill_value替换为其中一个输入中的缺失数据
它支持空数据帧和缺失数据,其中减号运算符不是。
使用pandas和numpy,使用您正在使用的对象的成员函数是一种很好的做法。