nat = np.datetime64('NaT')
nat == nat
>> FutureWarning: In the future, 'NAT == x' and 'x == NAT' will always be False.
np.isnan(nat)
>> TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Run Code Online (Sandbox Code Playgroud)
如何检查datetime64是否为NaT?我似乎无法从文档中挖掘出任何东西.我知道Pandas可以做到,但我宁愿不为这么基本的东西添加依赖.
我有一个包含 5 列的数据框,我正在使用 pandas 和 numpy 来编辑和处理数据。
id calv1 calv2 calv3 calv4
1 2006-08-29 2007-08-29 2008-08-29 2009-08-29
2 NaT NaT NaT NaT
3 2006-08-29 NaT NaT NaT
4 2006-08-29 2007-08-29 2010-08-29 NaT
5 2006-08-29 2013-08-29 NaT NaT
6 2006-08-29 NaT 2013-08-29 2013-08-292
Run Code Online (Sandbox Code Playgroud)
我想创建另一个列来计算每个 id 出现的“calv”的数量。但是,如果其他值之间存在缺失值,这对我来说很重要,请参阅第 6 行。然后我希望有一个 NaN 或其他一些值,表明这不是正确的行。
id calv1 calv2 calv3 calv4 no_calv
1 2006-08-29 2007-08-29 2008-08-29 2009-08-29 4
2 NaT NaT NaT NaT 0
3 2006-08-29 NaT NaT NaT 1
4 2006-08-29 2007-08-29 2010-08-29 NaT 3
5 …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据其他列中的值在以下 Pandas DataFrame 中创建一个新列“Var”。我在处理 , 时遇到问题NaN。NaT
数据:(在上一步中
使用的apply(pd.to_datetime)列)Date
| 日期 | C | A | 年龄 |
|---|---|---|---|
| 2017-12-13 | 1233.0 | 氮 | 9 |
| 钠盐 | 南 | 氮 | 5 |
| 2007-09-24 | 49.0 | 氮 | 14 |
代码:
def program(Flat):
if Flat['A'] == 'N' :
return 0
elif Flat['Date'].isna() :
return Flat['Age'] + 1
elif Flat['C'] < 365 :
return 1
elif Flat['C'] >= 365 :
return math.floor((Flat['C'])/365.25) + 1
Flat['Var'] = Flat.apply(program, axis=1)
Run Code Online (Sandbox Code Playgroud)
错误:AttributeError:“NaTType”对象没有属性“isna”
尝试通过 Anaconda 和 Python 运行。都是同样的错误。Pandas 版本是 1.3.3。
检测类型的正确方法是什么NaT?