不是问题,只是有些困惑。
我有一列日期,看起来像这样:
0 NaT
1 1996-04-01
2 2000-03-01
3 NaT
4 NaT
5 NaT
6 NaT
7 NaT
8 NaT
我希望您能将NaTs转换为静态值。 (假设我已经导入了pandas作为pd和numpy作为np)。
如果我执行以下操作:
mydata['mynewdate'] = mydata.mydate.replace(
np.NaN, pd.datetime(1994,6,30,0,0))
一切都好,我明白了:
0 1994-06-30
1 1996-04-01
2 2000-03-01
3 1994-06-30
4 1994-06-30
5 1994-06-30
6 1994-06-30
7 1994-06-30
8 1994-06-30
但是如果我这样做:
mydata['mynewdate'] = np.where(
mydata['mydate'].isnull(), pd.datetime(1994,6,30,0,0),mydata['mydate'])
我得到:
0 1994-06-30 00:00:00
1 828316800000000000
2 951868800000000000
3 1994-06-30 00:00:00
4 1994-06-30 00:00:00
5 1994-06-30 00:00:00
6 1994-06-30 00:00:00
7 1994-06-30 00:00:00
8 1994-06-30 00:00:00
此操作将原始的非空日期转换为整数。我认为可能存在数据类型混淆,因此进行了这个操作:
mydata['mynewdate'] = np.where(
mydata['mydate'].isnull(), pd.datetime(1994,6,30,0,0),pd.to_datetime(mydata['mydate']))
仍然是这样得到:
0 1994-06-30 00:00:00
1 828316800000000000
2 951868800000000000
3 1994-06-30 00:00:00
4 1994-06-30 00:00:00
5 1994-06-30 00:00:00
6 1994-06-30 00:00:00
7 1994-06-30 00:00:00
8 1994-06-30 00:00:00
请注意(不要问):是的,我有更好的解决方案来替换null。这个问题不是关于替换null(正如标题所示),而是关于numpy where如何处理日期。我提出这个问题是因为未来我将有更复杂的条件来选择要替换的日期,并且认为numpy where可以胜任。
有什么想法吗?