I have datetime and int values dictionary like below.
end_date = datetime.datetime.strptime("01-12-2020", "%d-%m-%Y")
details = {
datetime.datetime.strptime("30-01-2020", "%d-%m-%Y") : 15,
datetime.datetime.strptime("10-10-2020", "%d-%m-%Y") : 10,
datetime.datetime.strptime("11-10-2020", "%d-%m-%Y") : 11.5,
datetime.datetime.strptime("10-11-2020", "%d-%m-%Y") : 20,
datetime.datetime.strptime("12-11-2020", "%d-%m-%Y") : 23.19,
}
I would like to convert this to below pandas dataframe. Where ever data is not available in the dictionary it should fill with null
CodePudding user response:
IUUC, you can create an empty dataframe and loop the details
and fill value
import calendar
df = pd.DataFrame(index=range(1, 32), columns=list(calendar.month_abbr)[1:])
for k, v in details.items():
if k < end_date:
df.loc[k.day, k.strftime("%b")] = v
df = df.add_suffix('-20')
print(df)
Jan-20 Feb-20 Mar-20 Apr-20 May-20 Jun-20 Jul-20 Aug-20 Sep-20 Oct-20 Nov-20 Dec-20
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN NaN 10 20 NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN 11.5 NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 23.19 NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
30 15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
CodePudding user response:
Solution:
import pandas as pd
import datetime
df = pd.DataFrame(columns=[y '_2020' for y in ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']], index= [x for x in range(1,32)])
month_map={1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}
details = {
datetime.datetime.strptime("30-01-2020", "%d-%m-%Y") : 15,
datetime.datetime.strptime("10-10-2020", "%d-%m-%Y") : 10,
datetime.datetime.strptime("11-10-2020", "%d-%m-%Y") : 11.5,
datetime.datetime.strptime("10-11-2020", "%d-%m-%Y") : 20,
datetime.datetime.strptime("12-11-2020", "%d-%m-%Y") : 23.19,
}
for k1,v1 in details.items():
df.loc[k1.day, month_map[k1.month] '_2020']=v1