如何在排序日期(降序)的数据框中查找并添加缺失的日期?

时间:2020-06-29 23:17:43

标签: python python-3.7 python-datetime

在Python中,我有一个带有“日期”列的DataFrame(格式例如2020-06-26)。该列以降序排列:2020-06-26、2020-06-25、2020-06-24 ... 另一栏“评论”由网站的文字评论组成。我的数据可以在给定的日期有多个评论,或者在另一个日期没有评论。我想在“日期”列中找到缺少的日期。然后,对于每个缺少的日期,在“格式='%Y-%m-%d'”中添加一行日期,并在“评论”上添加一个空评论,以便对其进行绘图。我该怎么办?

from datetime import date, timedelta
d = data['Date'] 
print(d[0])
print(d[-1])

date_set = set(d[-1] + timedelta(x) for x in range((d[0] - d[-1]).days))
missing = sorted(date_set - set(d))
missing = pd.to_datetime(missing, format='%Y-%m-%d')

idx = pd.date_range(start=min(data.Date), end=max(data.Date), freq='D')

#tried this
data = data.reindex(idx, fill_value=0)
data.head()

#Got TypeError: 'fill_value' ('0') is not in this Categorical's categories.


#also tried this
df2 = (pd.DataFrame(data.set_index('Date'), index=idx).fillna(0) + data.set_index('Date')).ffill().stack()
df2.head()

#Got ValueError: cannot reindex from a duplicate axis

1 个答案:

答案 0 :(得分:0)

这是我的代码:

for i in range(len(df)):
    if i > 0:
        prev = df.loc[i-1]["Date"]
        current =df.loc[i]["Date"]
        for a in range((prev-current).days):
            if a > 0:
                 df.loc[df["Date"].count()] = [prev-timedelta(days = a), None]
                 
df = df.sort_values("Date", ascending=False)
print(df)