从具有可变长度的列表字典创建数据框

Posted

技术标签:

【中文标题】从具有可变长度的列表字典创建数据框【英文标题】:Create dataframe from dictionary of list with variable length 【发布时间】:2019-03-20 00:31:39 【问题描述】:

我有一个列表字典,就像 -

from collections import defaultdict
defaultdict(list,
            'row1': ['Affinity'],
             'row2': ['Ahmc',
              'Garfield',
              'Medical Center'],
             'row3': ['Alamance','Macbeth'],
             'row4': [],
             'row5': ['Mayday'])

我想将其转换为数据框。 输出应该看起来像-

ID  SYN1    SYN2    SYN3    SYN4    SYN5
row1    Affinity                
row2    Ahmc    Garfield    Medical Center      
row3    Alamance    Macbeth         
row4                    
row5    Mayday

【问题讨论】:

你能解释一下“值的可变长度是变化的”是什么意思吗? 听到“第 2 行”包含 3 个值。而“第 1 行”只有 1 个。 【参考方案1】:

collections.defaultdictdict 的子类。

所以你可以使用pd.DataFrame.from_dict:

res = pd.DataFrame.from_dict(dd, orient='index')
res.columns = [f'SYNi+1' for i in res]

print(res)

          SYN1      SYN2            SYN3
row1  Affinity      None            None
row2      Ahmc  Garfield  Medical Center
row3  Alamance   Macbeth            None
row4      None      None            None
row5    Mayday      None            None

【讨论】:

【参考方案2】:

是的,您可以使用Series

df=pd.Series(d).apply(pd.Series).fillna('')
Out[55]: 
             0         1               2
row1  Affinity                          
row2      Ahmc  Garfield  Medical Center
row3  Alamance   Macbeth                
row4                                    
row5    Mayday                          

或来自数据框构造函数

df=pd.DataFrame(data=list(d.values()),index=d.keys())
Out[64]: 
             0         1               2
row1  Affinity      None            None
row2      Ahmc  Garfield  Medical Center
row3  Alamance   Macbeth            None
row4      None      None            None
row5    Mayday      None            None

然后我们创建列

df.columns='SYN'+(df.columns+1).astype(str)
df
Out[67]: 
          SYN1      SYN2            SYN3
row1  Affinity      None            None
row2      Ahmc  Garfield  Medical Center
row3  Alamance   Macbeth            None
row4      None      None            None
row5    Mayday      None            None

【讨论】:

以上是关于从具有可变长度的列表字典创建数据框的主要内容,如果未能解决你的问题,请参考以下文章

从字典创建数据框[重复]

在熊猫中将可变长度列表保存到 HDF5

Numpy:从熊猫数据帧创建可变长度序列

从嵌套字典结构列表(具有两个级别)创建数据框的 Pythonic 方法是啥?

根据条件从 spark 数据框中删除行

在python中合并具有不同长度和列的数据框列表