将列表从大量字典转换为数据框的问题

我以这种方式创建了一个字典:


数据如下所示:


GDS3:

ABC_1     ABC_2     BBB_1

cat        elf       123

dog        run       456

bird       burp      789


GDS4:

ABC_3     ABC_4     BCB_a

beer        yes      234

wine        no       543

gin         yes      743


GDS5:

ABC_5     ABC_6     BCD_c

lol        yea       543

lmao       NaN       446

asl        NaN       777


#create a dictionary in which all columns that start with the same 3 characters will be grouped in the same key. 

dict_2013 = {k: g for k, g in GDS3.groupby(by=lambda x: x[:3].lower(), axis=1)}


dict_2014 = {k: g for k, g in GDS4.groupby(by=lambda x: x[:3].lower(), axis=1)}


dict_2015 = {k: g for k, g in GDS5.groupby(by=lambda x: x[:3].lower(), axis=1)}


#start with year 2013:

global_dict=dict_2013


#if key in the new dictionary is in the old dictionary then 

#add the values from the new dictionary key to the old dictionary key

#else if the new dictionary key does not exist in the old dictionary then add a new key with the new values


for key,val in dict_2014.items():

    if key in global_dict:

       global_dict[key]=[global_dict[key],val]

    else:

       global_dict[key]=val


for key,val in dict_2015.items():#to add items

    if key in global_dict:

        global_dict[key]=[global_dict[key],val]

    else:

       global_dict[key]=val

这是我想要的输出(每个键的数据帧)


  df_ABC:

  ABC_1     ABC_2     ABC_3   ABC_4   ABC_5

  cat        elf       beer    yes    lol

  dog        run       win     no     lmao

  bird       burp      gin     yes    asl


  df_BBB:

  BBB_1

  cat   

  dog        

  bird      

换句话说,我想将单个键转换为单个字典(对于所有键),所以我尝试了以下操作:


ABC_dataframe=pd.DataFrame(global_dict['ABC'])

当我这样做时,我收到以下错误:


TypeError: Expected list, got DataFrame

这很奇怪,因为 global_dict['ABC'] 是一个列表。(我使用 type(global_dict['ABC']) 检查。


我能做些什么来纠正这个问题?我尝试将列表展平,但仍有问题。


慕森卡
浏览 119回答 2
2回答

牧羊人nacy

逻辑中最令人困惑的部分是具有global_dict数据框或列表的值。保持对象类型一致;每次您希望添加一个值时,选择列表并附加到它。该Python化的解决方案是使用collections.defaultdict的list对象:from collections import defaultdictglobal_dict = defaultdict(list, {k: [v] for k, v in dict_2013.items()})for key,val in dict_2014.items():    global_dict[key].append(val)for key,val in dict_2015.items():    global_dict[key].append(val)然后使用pd.concat沿着axis=1:abc = pd.concat(global_dict['abc'], axis=1)print(abc)  ABC_1 ABC_2 ABC_3 ABC_4 ABC_5 ABC_60   cat   elf  beer   yes   lol   yea1   dog   run  wine    no  lmao   NaN2  bird  burp   gin   yes   asl   NaN我无法解释为什么缺少您想要的结果ABC_6。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python