将nan值替换为唯一日期(numpy数组中的日期。)

时间:2018-01-06 06:40:51

标签: python pandas datetime dataframe

我在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

有人能建议我采用正确的方法吗?

任何帮助都将不胜感激。

1 个答案:

答案 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'