Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 日期范围返回yyyy ww的“无法将字符串转换为时间戳”_Python_Pandas - Fatal编程技术网

Python 日期范围返回yyyy ww的“无法将字符串转换为时间戳”

Python 日期范围返回yyyy ww的“无法将字符串转换为时间戳”,python,pandas,Python,Pandas,我有一个有两列的数据框;销售和日期 我想将日期列从yyyy-mm-dd(例如2015-06-01)转换为yyyy-ww(例如2015-23),因此我运行以下代码: dataset["Date"] = pd.to_datetime(dataset["Date"]).dt.strftime('%Y-%V') 然后,我根据销售周数进行分组,即 data = dataset.groupby(['Date'])["Sales"].sum().reset_index() data.head(10)

我有一个有两列的数据框;销售和日期

我想将日期列从yyyy-mm-dd(例如2015-06-01)转换为yyyy-ww(例如2015-23),因此我运行以下代码:

dataset["Date"] = pd.to_datetime(dataset["Date"]).dt.strftime('%Y-%V')
然后,我根据销售周数进行分组,即

data = dataset.groupby(['Date'])["Sales"].sum().reset_index()

data.head(10)

    Date    Sales
0   2015-01 67797.0
1   2015-02 102714.0
2   2015-03 107011.0
3   2015-04 121480.0
4   2015-05 148098.0
5   2015-06 132152.0
6   2015-07 133914.0
7   2015-08 136160.0
8   2015-09 185471.0
9   2015-10 190793.0
现在我想基于date列创建一个日期范围,因为我是基于周数预测销售额的:

ds = data.Date.values
ds_pred = pd.date_range(start=ds.min(), periods=len(ds) + num_pred_weeks, 
freq="W")
但是,我遇到了以下错误:无法将字符串转换为时间戳,我不确定如何修复。因此,如果我使用2015-01-01作为日期导入的开始日期,我不会得到任何错误,这使我意识到我使用的函数是错误的。但是,我不知道怎么做


我希望基本上有一个日期范围,从现在的一周到未来的52周

我认为问题在于需要创建由YYYY-VV格式的字符串填充的dataset[Date]列的最小值。但对于“传递到日期”范围,需要格式为YYYY-MM-DD或datetime对象

我发现:

为了方便起见,还包括了C89标准不要求的几个附加指令。这些参数都对应于ISO 8601日期值。当与strftime方法一起使用时,这些可能在所有平台上都不可用。ISO 8601年和ISO 8601周指令不能与上述年和周编号指令互换。使用不完整或不明确的ISO 8601指令调用strTime将引发ValueError

%V ISO 8601星期为十进制数字,星期一为一周的第一天。第01周是包含1月4日的一周

YYYY-VV格式的0.24.2错误:

ValueError:“V”是格式为“%Y-%V”的错误指令

可能的解决方案是使用%U或%W,请检查:

%U一年中的周数星期日作为一周的第一天,以零填充十进制数表示。新年中第一个星期日之前的所有日子都被视为在第0周。 %W一年中的周数星期一作为一周的第一天作为十进制数。新年中第一个星期一之前的所有日子都被视为在第0周

或者使用datetimes中原始数据框中的数据:

dataset = pd.DataFrame({'Date':['2015-06-01','2015-06-02'],
                        'Sales':[10,20]})
 
dataset["Date"] = pd.to_datetime(dataset["Date"])
print (dataset)
        Date  Sales
0 2015-06-01     10
1 2015-06-02     20

data = dataset.groupby(dataset['Date'].dt.strftime('%Y-%V'))["Sales"].sum().reset_index()
print (data)
      Date  Sales
0  2015-23     30

num_pred_weeks = 5
ds = data.Date.values
ds_pred = pd.date_range(start=dataset["Date"].min(), periods=len(ds) + num_pred_weeks, freq="W")
print (ds_pred)
DatetimeIndex(['2015-06-07', '2015-06-14', '2015-06-21', 
               '2015-06-28',
               '2015-07-05', '2015-07-12'],
              dtype='datetime64[ns]', freq='W-SUN')
如果ds包含格式为“2015-01”的字符串形式的日期,该字符串在datetime库中应为“%Y-%W”或“%G-%V”,则必须添加一个日数才能获得一天。在这里,假设您想要星期一,您应该:

ds_pred = pd.date_range(start=pd.to_datetime(ds.min() + '-1', format='%Y-%W-%w',
                                             periods=len(ds) + num_pred_weeks, freq="W")

似乎您引用了错误的对象,在上面的问题中,您在data中插入了新的dataframe,但在pd.data\u范围行中,您称为ds。试试这个:ds\u pred=pd.date\u rangestart=data.min,periods=lendata+num\u pred\u weeks,freq=w你能在这之后检查你的日期列类型吗你的步骤是:data=dataset.groupby['date'][Sales].sum.reset\u index是对象类型吗?这是一个奇怪的错误:@Erfan抱歉,忘了添加一点代码!我的bad@AT_asks是的,这是一个DataFrame不确定我是否正确理解OP,但他不只是想要格式%Y-%W吗?@Erfan-这是不同的,我发现差异@Erfan是正确的-我只想使用pd.date\u range或其他方法增加每周数据。似乎无法识别格式为yyyy ww格式。@Artem-是的,需要yyyy-MM-DD格式的datetime。@jezrael-Argh,我现在明白了。等一下,也许可以使用你的第二个解决方案。
dataset = pd.DataFrame({'Date':['2015-06-01','2015-06-02']})

dataset["Date"] = pd.to_datetime(dataset["Date"]).dt.strftime('%Y-%U')
print (dataset)
      Date
0  2015-22
1  2015-22

ds = pd.to_datetime(dataset['Date'] + '-1', format='%Y-%U-%w')
print (ds)
0   2015-06-01
1   2015-06-01
Name: Date, dtype: datetime64[ns]
dataset = pd.DataFrame({'Date':['2015-06-01','2015-06-02'],
                        'Sales':[10,20]})
 
dataset["Date"] = pd.to_datetime(dataset["Date"])
print (dataset)
        Date  Sales
0 2015-06-01     10
1 2015-06-02     20

data = dataset.groupby(dataset['Date'].dt.strftime('%Y-%V'))["Sales"].sum().reset_index()
print (data)
      Date  Sales
0  2015-23     30

num_pred_weeks = 5
ds = data.Date.values
ds_pred = pd.date_range(start=dataset["Date"].min(), periods=len(ds) + num_pred_weeks, freq="W")
print (ds_pred)
DatetimeIndex(['2015-06-07', '2015-06-14', '2015-06-21', 
               '2015-06-28',
               '2015-07-05', '2015-07-12'],
              dtype='datetime64[ns]', freq='W-SUN')
ds_pred = pd.date_range(start=pd.to_datetime(ds.min() + '-1', format='%Y-%W-%w',
                                             periods=len(ds) + num_pred_weeks, freq="W")