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
我有上面提到的DataFrame。请注意,“日期”列的类型为int64,缺少第19和第20个日期。
我想将其转换为yyyy-mm-dd格式,并在商品ID,出口代码和销售单位中使用值为0的缺失日期。
到目前为止,我已经尝试过:
df['Date'] = pd.to_datetime(df['Date'].astype(str), format='%Y-%m-%d')
以所需的格式获取日期。
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
但是,如何估算缺少的19日和20日,并在新添加的日期行下估算0呢?
这是我所做的代码片段,返回值错误:无法从重复的轴重新索引。
答案 0 :(得分:1)
您可以使用DataFrame.asfreq
在删除重复项然后添加重复数据并进行排序之后重新索引:
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
答案 1 :(得分:0)
您可以使用:
df['Date'] = pd.to_datetime(df['Date'].astype(str), format='%Y-%m-%d',errors='coerce')
您不会错过错过的日期,但是由NaT代表。
你有类似的东西
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