与其说是一个问题,不如说是让我感到困惑的东西。我有一列日期,看起来像这样:0 NaT1 1996-04-012 2000-03-013 NaT4 NaT5 NaT6 NaT7 NaT8 NaT我想将它的 NaT 转换为静态值。(假设我将熊猫导入为 pd,将 numpy 导入为 np)。如果我做:mydata['mynewdate'] = mydata.mydate.replace( np.NaN, pd.datetime(1994,6,30,0,0))一切都很好,我得到:0 1994-06-301 1996-04-012 2000-03-013 1994-06-304 1994-06-305 1994-06-306 1994-06-307 1994-06-308 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:001 8283168000000000002 9518688000000000003 1994-06-30 00:00:004 1994-06-30 00:00:005 1994-06-30 00:00:006 1994-06-30 00:00:007 1994-06-30 00:00:008 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:001 8283168000000000002 9518688000000000003 1994-06-30 00:00:004 1994-06-30 00:00:005 1994-06-30 00:00:006 1994-06-30 00:00:007 1994-06-30 00:00:008 1994-06-30 00:00:00请注意(不要问):是的,我有一个更好的解决方案来替换空值。这个问题不是关于替换空值(正如标题所表明的那样),而是关于 numpy where 处理日期的方式。我问是因为我将有更复杂的条件来选择将来要替换的日期,并认为 numpy 在哪里可以完成这项工作。有任何想法吗?
2 回答
阿晨1998
TA贡献2037条经验 获得超6个赞
这是由于 Numpy's datetime64、 Pandas'Timestamp和/或datetime.datetime. 我通过numpy.datetime64从一开始就将替换值设置为 a来修复它。
static_date = np.datetime64('1994-06-30')
# static_date = np.datetime64(pd.datetime(1994, 6, 30))
mydata.assign(
mynewdate=np.where(
mydata.mydate.isnull(),
static_date,
mydata.mydate
)
)
mydate mynewdate
0 NaT 1994-06-30
1 1996-04-01 1996-04-01
2 2000-03-01 2000-03-01
3 NaT 1994-06-30
4 NaT 1994-06-30
5 NaT 1994-06-30
6 NaT 1994-06-30
7 NaT 1994-06-30
8 NaT 1994-06-30
添加回答
举报
0/150
提交
取消