與其說是一個問題,不如說是讓我感到困惑的東西。我有一列日期,看起來像這樣: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
提交
取消