【发布时间】:2019-08-27 16:31:46
【问题描述】:
我有一个数据框,其中缺少日期列的几个日期值,并且存在所有其他数据值。我必须填写日期值。日期值必须介于这两个值之间。例如,填写 1988 年 13 月 12 日至 2012 年 1 月 20 日之间的缺失日期。
请帮帮我。
非常感谢, 阿尼克特·帕特尔
【问题讨论】:
标签: python data-science
我有一个数据框,其中缺少日期列的几个日期值,并且存在所有其他数据值。我必须填写日期值。日期值必须介于这两个值之间。例如,填写 1988 年 13 月 12 日至 2012 年 1 月 20 日之间的缺失日期。
请帮帮我。
非常感谢, 阿尼克特·帕特尔
【问题讨论】:
标签: python data-science
您可以使用 datetime.timedelta 函数来获取时间偏移量。这可用于生成从时间a 到时间b 的每个日期。
a = datetime.datetime(1988, 12, 13)
b = datetime.datetime(2012, 1, 20)
# get all date between a and b
date_list = [a + datetime.timedelta(days=x) for x in range((b - a).days)]
# format dates for pretty printing
date_str_list = ['{}/{}/{}'.format(d.year, d.month, d.day) for d in date_list]
# print first five dates
print(date_str_list[:5])
【讨论】:
将您的日期转换为自纪元以来的时间增量(以秒为单位)。为本系列调用 pandas interpolate 函数。如果您想要日期表示,请转换回来
df = pd.DataFrame(dict(date = pd.date_range('20130101',periods=10)))
df.iloc[5]['date'] = ''
date
0 2013-01-01
1 2013-01-02
2 2013-01-03
3 2013-01-04
4 2013-01-05
5 NaT
6 2013-01-07
7 2013-01-08
8 2013-01-09
9 2013-01-10
in_sec = pd.to_timedelta(df['date'], unit='second') / np.timedelta64(1, 's')
result = in_sec.interpolate()
result = pd.to_datetime(result ,unit='s')
0 2013-01-01
1 2013-01-02
2 2013-01-03
3 2013-01-04
4 2013-01-05
5 2013-01-06
6 2013-01-07
7 2013-01-08
8 2013-01-09
9 2013-01-10
【讨论】: