为什么pd.date_range返回空序列?

时间:2019-06-24 20:22:10

标签: python pandas

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

1 个答案:

答案 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))打印出一个空列表)。最好的解决方法是致电minmax

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