Python 在熊猫中填充数据帧

Python 在熊猫中填充数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试在熊猫中填充数据帧。我试着创建一个字典,然后把它放在一个数据框中,但没有成功 以下是我当前的代码: holidays_dic= { 'Half_Summer17' :{'26-05-2017':'01-06-2017'} ,'Summer17' :{'21-07-2017':'31-08-2017'} ,'Half_Fall17' :{'20-10-2017':'26-10-2017'} ,'Xmas17' :{'2

我正在尝试在熊猫中填充数据帧。我试着创建一个字典,然后把它放在一个数据框中,但没有成功

以下是我当前的代码:

holidays_dic= {
    'Half_Summer17'   :{'26-05-2017':'01-06-2017'}
    ,'Summer17'       :{'21-07-2017':'31-08-2017'}
    ,'Half_Fall17'    :{'20-10-2017':'26-10-2017'}
    ,'Xmas17'         :{'20-12-2017':'02-01-2018'}
    ,'Half_Spring18'  :{'12-02-2018':'16-02-2018'}
    ,'Easter18'       :{'30-03-2018':'13-04-2018'}
    ,'Half_Summer18'  :{'28-05-2018':'01-06-2018'}
    ,'Summer18'       :{'25-07-2018':'04-09-2018'}
    ,'Half_Fall18'    :{'22-10-2018':'25-10-2018'}
    ,'Xmas18'         :{'20-12-2018':'03-01-2018'}
 #   ,'Half_Spring19'  :{'01-01-2017':'01-01-2017'}
 #   ,'Easter19'       :{'01-01-2017':'01-01-2017'}
}

df_holidays=pd.DataFrame(holidays_dic,)

#holidays_dic
df_holidays
我想要的输出是这样的:

index           sDate     eDate
Half_Summer17   26-05-17  01-06-17
Summer 17       21-07-17   31-08-17
etc
import pandas as pd

holidays_dic = {
    'Half_Summer17': {'26-05-2017': '01-06-2017'}
    , 'Summer17': {'21-07-2017': '31-08-2017'}
    , 'Half_Fall17': {'20-10-2017': '26-10-2017'}
    , 'Xmas17': {'20-12-2017': '02-01-2018'}
    , 'Half_Spring18': {'12-02-2018': '16-02-2018'}
    , 'Easter18': {'30-03-2018': '13-04-2018'}
    , 'Half_Summer18': {'28-05-2018': '01-06-2018'}
    , 'Summer18': {'25-07-2018': '04-09-2018'}
    , 'Half_Fall18': {'22-10-2018': '25-10-2018'}
    , 'Xmas18': {'20-12-2018': '03-01-2018'}
}

data = [[holidays, start, end] for holidays, date_range in holidays_dic.items() for start, end in date_range.items()]
df = pd.DataFrame(data=data, columns=['holiday', 'sDate', 'eDate']).set_index(['holiday'])
print(df)

有人有什么想法吗?

你可以这样做:

index           sDate     eDate
Half_Summer17   26-05-17  01-06-17
Summer 17       21-07-17   31-08-17
etc
import pandas as pd

holidays_dic = {
    'Half_Summer17': {'26-05-2017': '01-06-2017'}
    , 'Summer17': {'21-07-2017': '31-08-2017'}
    , 'Half_Fall17': {'20-10-2017': '26-10-2017'}
    , 'Xmas17': {'20-12-2017': '02-01-2018'}
    , 'Half_Spring18': {'12-02-2018': '16-02-2018'}
    , 'Easter18': {'30-03-2018': '13-04-2018'}
    , 'Half_Summer18': {'28-05-2018': '01-06-2018'}
    , 'Summer18': {'25-07-2018': '04-09-2018'}
    , 'Half_Fall18': {'22-10-2018': '25-10-2018'}
    , 'Xmas18': {'20-12-2018': '03-01-2018'}
}

data = [[holidays, start, end] for holidays, date_range in holidays_dic.items() for start, end in date_range.items()]
df = pd.DataFrame(data=data, columns=['holiday', 'sDate', 'eDate']).set_index(['holiday'])
print(df)
输出

                    sDate       eDate
holiday                              
Half_Summer18  28-05-2018  01-06-2018
Easter18       30-03-2018  13-04-2018
Xmas18         20-12-2018  03-01-2018
Xmas17         20-12-2017  02-01-2018
Half_Fall17    20-10-2017  26-10-2017
Half_Summer17  26-05-2017  01-06-2017
Summer18       25-07-2018  04-09-2018
Half_Fall18    22-10-2018  25-10-2018
Summer17       21-07-2017  31-08-2017
Half_Spring18  12-02-2018  16-02-2018
                sDate        eDate
Half_Summer17   26-05-2017  01-06-2017
Summer17    21-07-2017  31-08-2017
使用-

holidays_dic = {'sDate':['26-05-2017','21-07-2017'], 'eDate':['01-06-2017','31-08-2017'], 'index':['Half_Summer17', 'Summer17']}

df_holidays=pd.DataFrame.from_dict(holidays_dic)
df_holidays = df_holidays.set_index('index')
输出

                    sDate       eDate
holiday                              
Half_Summer18  28-05-2018  01-06-2018
Easter18       30-03-2018  13-04-2018
Xmas18         20-12-2018  03-01-2018
Xmas17         20-12-2017  02-01-2018
Half_Fall17    20-10-2017  26-10-2017
Half_Summer17  26-05-2017  01-06-2017
Summer18       25-07-2018  04-09-2018
Half_Fall18    22-10-2018  25-10-2018
Summer17       21-07-2017  31-08-2017
Half_Spring18  12-02-2018  16-02-2018
                sDate        eDate
Half_Summer17   26-05-2017  01-06-2017
Summer17    21-07-2017  31-08-2017
计时

@维韦克[1]

527 µs ± 140 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
@维韦克[2]

1.12 ms ± 169 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
@赛库马尔

3.22 ms ± 416 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
@丹尼尔

1.21 ms ± 235 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
另一种方法

df = pd.DataFrame(holidays_dic).T.stack().reset_index(level=1)

df = df.rename(columns = {'level_1':'sDate', 0:'eDate'}) # Rename columns.

print (df)
                    sDate       eDate
Half_Summer17  26-05-2017  01-06-2017
Summer17       21-07-2017  31-08-2017
Half_Fall17    20-10-2017  26-10-2017
Xmas17         20-12-2017  02-01-2018
Half_Spring18  12-02-2018  16-02-2018
Easter18       30-03-2018  13-04-2018
Half_Summer18  28-05-2018  01-06-2018
Summer18       25-07-2018  04-09-2018
Half_Fall18    22-10-2018  25-10-2018
Xmas18         20-12-2018  03-01-2018

这正是我想要的。非常感谢。:)“数据”只是一个对象列表吗?
data
是一个列表列表,每个内部列表对应于
DataFrame
Vivek中的一行,我想您输入的数据格式是错误的。这是一个dict of dict而不是dict of list。OP声明他想将dict转换成所需的
df
格式的数据帧。这就让我来解释dict格式本身是可以修改的,我想OP只是想用他的数据dict来构造一个数据帧。