Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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 在数据框中输入缺失的日期_Python_Pandas_Dataframe_Datetime - Fatal编程技术网

Python 在数据框中输入缺失的日期

Python 在数据框中输入缺失的日期,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我有上面给定的数据帧。请注意,日期列的类型为int64,缺少日期19和20 我想将其转换为yyyy-mm-dd格式,并用商品ID、门店代码和销售单位中的值0来估算缺失的日期 到目前为止,我已经尝试: df = pd.read_csv( 'https://media-doselect.s3.amazonaws.com/generic/MJjpYqLzv08xAkjqLp1ga1Aq/Historical_Data.csv') df.head() Date Artic

我有上面给定的数据帧。请注意,日期列的类型为int64,缺少日期19和20

我想将其转换为yyyy-mm-dd格式,并用商品ID、门店代码和销售单位中的值0来估算缺失的日期

到目前为止,我已经尝试:

df = pd.read_csv(
    'https://media-doselect.s3.amazonaws.com/generic/MJjpYqLzv08xAkjqLp1ga1Aq/Historical_Data.csv')
df.head()

    Date        Article_ID   Country_Code   Sold_Units
0   20170817        1132       AT               1
1   20170818        1132       AT               1
2   20170821        1132       AT               1
3   20170822        1132       AT               1
4   20170906        1132       AT               1
以获取所需格式的日期

df['Date'] = pd.to_datetime(df['Date'].astype(str), format='%Y-%m-%d')
但是,如何计算缺失的19日和20日的日期,并在新添加的日期行下计算0行

下面是我所做的一个片段,它返回了一个值错误:无法从重复的轴重新编制索引

您可以使用 要在删除重复数据并添加重复数据和排序后重新编制索引,请执行以下操作:

    Date         Article_ID  Outlet_Code   Sold_Units
0   2017-08-17      1132       AT               1
1   2017-08-18      1132       AT               1
2   2017-08-21      1132       AT               1
3   2017-08-22      1132       AT               1
4   2017-09-06      1132       AT               1
您可以使用:

df['Date'] = pd.to_datetime(df['Date'].astype(str), format='%Y-%m-%d')
df2=df[df.duplicated('Date')].set_index('Date')
new_df=df.drop_duplicates('Date').set_index('Date').asfreq('D',fill_value=0)
new_df=new_df.append(df2).sort_index().reset_index()
print(new_df)

         Date  Article_ID Country_Code  Sold_Units
0  2017-08-17        1132           AT           1
1  2017-08-17        1132           AT           1
2  2017-08-18        1132           AT           1
3  2017-08-19           0            0           0
4  2017-08-20           0            0           0
5  2017-08-21        1132           AT           1
6  2017-08-22        1132           AT           1
7  2017-08-23           0            0           0
8  2017-08-24           0            0           0
9  2017-08-25           0            0           0
10 2017-08-26           0            0           0
11 2017-08-27           0            0           0
12 2017-08-28           0            0           0
13 2017-08-29           0            0           0
14 2017-08-30           0            0           0
15 2017-08-31           0            0           0
16 2017-09-01           0            0           0
17 2017-09-02           0            0           0
18 2017-09-03           0            0           0
19 2017-09-04           0            0           0
20 2017-09-05           0            0           0
21 2017-09-06        1132           AT           1
你不会错过你错过的日期,但它是由NaT代表的

你有这样的东西

df['Date'] = pd.to_datetime(df['Date'].astype(str), format='%Y-%m-%d',errors='coerce')

我在尝试您的代码时遇到此错误。ValueError:无法从重复的axisdf=pd重新编制索引。read_csv(')这是数据集。使用Groupby(level=0)命令仅在日期列之前添加level_0。我已添加了返回值错误的输出图像。我已更新代码。该策略可以是在没有重复行的情况下重新编制索引,然后再添加这些行。请检查此尝试:)我希望将估算的日期附加到数据帧。什么日期?如果你没有这个值,因为它丢失了,那么你就是在伪造它。你可以假设一个,因为你的数据看起来是有序的,但你不能100%确定。在数据框中,应该添加19和20,因为它们缺少日期。算术代码和售出单位的值应该是0。我没有使用完整的数据框,我只使用了前3条记录,第3条记录的数据为空。“errors='procure'”所做的是忽略错误,并转换数据,不管发生什么。现在我看到你在谈论日期之间的间隔。我以为是你的日期栏里的NaN值。我的错,对不起。但我看到有人已经提供了一个有效的答案。
       Date  Article_ID Outlet_Code  Sold_Units
 0 2017-08-17        1132          AT           1
 1 2017-08-18        1132          AT           1
 2        NaT        1132          AT           1