pd.date_range不接受开始日期和结束日期的字符串变量。 我从另一个数据框中获取变量的开始日期和结束日期:
start_date = yoy_traffic_df['dt'].iloc[0]
end_date = yoy_traffic_df['dt'].iloc[-1]
print(yoy_traffic_df['dt'].iloc[[0, -1]].to_dict())
{0: '2018-09-14', 5567: '2018-03-28'}
开始日期和结束日期是字符串类型:
print(type(start_date),type(end_date))
<class 'str'> <class 'str'>
print(end_date,start_date)
2018-09-14 2018-03-28
dates = pd.Series(pd.date_range(start=start_date, end=end_date, freq='D'))
Series([], dtype: datetime64[ns])
如果我将变量设置为特定日期,则pd.date_range会提供所需的输出
start_date = '2018-03-28'
end_date = '2018-09-14'
d = pd.Series(pd.date_range(start=start_date, end=end_date, freq='D'))
d.head()
0 2018-03-28
1 2018-03-29
2 2018-03-30
3 2018-03-31
4 2018-04-01
dtype: datetime64[ns]
预期输出为
之类的series.head()0 2018-03-28
1 2018-03-29
2 2018-03-30
3 2018-03-31
4 2018-04-01
答案 0 :(得分:3)
看来end_date
早于start_date
。
start_date = yoy_traffic_df['dt'].iloc[0]
end_date = yoy_traffic_df['dt'].iloc[-1]
start_date < end_date
# False
因此date_range
变成空的:
pd.date_range(start_date, end_date)
# DatetimeIndex([], dtype='datetime64[ns]', freq='D')
这类似于python的range
的工作方式(list(range(5, 1))
打印出一个空列表)。最好的解决方法是致电min
或max
,
start_date, end_date = yoy_traffic_df['dt'].min(), yoy_traffic_df['dt'].max()
尽管如果您特别想要第一个和最后一个(不一定是min或max),请编写一些代码来交换它们。
if start_date > end_date:
start_date, end_date = end_date, start_date