我在for循环中编写了一个代码:
date = dit[x]["Time"].dt.date.unique()
output:
[datetime.date(2017, 6, 5)]
我得到一个numpy数组。
我有一个这样的数据框:
Position Values Date
0 1.0 826.18 NaN
1 22.0 828.11 NaN
2 33.0 826.18 NaN
3 56.0 826.09 NaN
我想用我从上面代码中得到的唯一日期替换Nan值。
我的方法:
peaks_df["Date"] = peaks_df["Date"].replace(np.nan, str(date))
output:
Position Values Date
0 1.0 826.18 [datetime.date(2017, 6, 5)]
1 22.0 828.11 [datetime.date(2017, 6, 5)]
2 33.0 826.18 [datetime.date(2017, 6, 5)]
3 56.0 826.09 [datetime.date(2017, 6, 5)]
预期产出:
Position Values Date
0 1.0 826.18 6/5/2017
1 22.0 828.11 6/5/2017
2 33.0 826.18 6/5/2017
3 56.0 826.09 6/5/2017
有人能建议我采用正确的方法吗?
任何帮助都将不胜感激。
答案 0 :(得分:2)
.unique()
返回选择中所有唯一元素的列表(可能有多个)。如果您确定仅是给定数据的一个日期,则只需访问列表的第一个(也是唯一的)元素。我使用了三元组,以防列表为空,在这种情况下,它返回一个空字符串。
.replace(np.nan, str(date[0]) if date else "")
您可以通过以下方式注意到问题的根源:
>>> str([dt.date.today()])
'[datetime.date(2018, 1, 5)]'
您的date
变量是包含单个日期的列表。将其转换为字符串会产生上面的输出。
然而,取这个列表的第一个元素会产生你想要的结果:
>>> str([dt.date.today()][0])
'2018-01-05'