如何将字典作为行添加到DataFrame?

时间:2017-03-06 17:59:35

标签: python pandas dictionary dataframe

我有一个DataFrame,其中包含以下列:

columns = ['Autor', 'Preţul', 'Suprafaţa totală', 'Etaj', 'Etaje', 'Tipul casei', 'Tipul de camere','Numărul de camere','Starea apartamentului', 'Planificare', 'Tipul clădirii', 'Sectorul', 'Strada',  'Numărul casei']
df = pd.DataFrame(columns=columns)

我想逐行添加一些词典DataFrame,例如我要在这首字典中添加第一行:

{'Autor': nan,
 'Balcon/lojă': '2',
 'Etaj': '1',
 'Grup sanitar': 'separat',
 'Locul de amplasare în casă': 'In mijlocul casei',
 'Numărul casei': nan,
 'Numărul de camere': '4 şi mai multe camere',
 'Parcare': 'deschisă',
 'Preţul': nan,
 'Sectorul': nan,
 'Strada': nan,
 'Suprafaţa totală': '90 m²',
 'Tipul clădirii': 'Dat în exploatare'}

字典中不在DataFrame列中的键值应设置为NaN值。字典只有一部分列名作为键。

例如第二个词典:

{'Autor': nan,
 'Numărul casei': nan,
 'Numărul de camere': '3 camere',
 'Preţul': nan,
 'Sectorul': nan,
 'Strada': nan,
 'Suprafaţa totală': '103 m²',
 'Tipul clădirii': 'Dat în exploatare'}

字典是for循环的结果,它们应该作为唯一行添加。

2 个答案:

答案 0 :(得分:6)

使用pandas.DataFrame.from_dict替代构造函数。建立你的"行"到列表开头:

In [22]: import numpy as np

In [23]: nan = np.nan

In [24]: rows = []

In [25]: rows.append({'Autor': nan,
    ...:  'Balcon/lojă': '2',
    ...:  'Etaj': '1',
    ...:  'Grup sanitar': 'separat',
    ...:  'Locul de amplasare în casă': 'In mijlocul casei',
    ...:  'Numărul casei': nan,
    ...:  'Numărul de camere': '4 şi mai multe camere',
    ...:  'Parcare': 'deschisă',
    ...:  'Preţul': nan,
    ...:  'Sectorul': nan,
    ...:  'Strada': nan,
    ...:  'Suprafaţa totală': '90 m²',
    ...:  'Tipul clădirii': 'Dat în exploatare'})

In [26]: rows.append({'Autor': nan,
    ...:  'Numărul casei': nan,
    ...:  'Numărul de camere': '3 camere',
    ...:  'Preţul': nan,
    ...:  'Sectorul': nan,
    ...:  'Strada': nan,
    ...:  'Suprafaţa totală': '103 m²',
    ...:  'Tipul clădirii': 'Dat în exploatare'})

然后,确保通过适当的" orient"参数:

In [28]: pd.DataFrame.from_dict(rows, orient='columns')
Out[28]:
   Autor Balcon/lojă Etaj Grup sanitar Locul de amplasare în casă  \
0    NaN           2    1      separat          In mijlocul casei
1    NaN         NaN  NaN          NaN                        NaN

   Numărul casei      Numărul de camere   Parcare  Preţul  Sectorul  Strada  \
0            NaN  4 şi mai multe camere  deschisă     NaN       NaN     NaN
1            NaN               3 camere       NaN     NaN       NaN     NaN

  Suprafaţa totală     Tipul clădirii
0            90 m²  Dat în exploatare
1           103 m²  Dat în exploatare

修改

实际上,只是注意到普通的构造函数工作正常,并且不需要任何参数!

In [31]: pd.DataFrame(rows)
Out[31]:
   Autor Balcon/lojă Etaj Grup sanitar Locul de amplasare în casă  \
0    NaN           2    1      separat          In mijlocul casei
1    NaN         NaN  NaN          NaN                        NaN

   Numărul casei      Numărul de camere   Parcare  Preţul  Sectorul  Strada  \
0            NaN  4 şi mai multe camere  deschisă     NaN       NaN     NaN
1            NaN               3 camere       NaN     NaN       NaN     NaN

  Suprafaţa totală     Tipul clădirii
0            90 m²  Dat în exploatare
1           103 m²  Dat în exploatare

答案 1 :(得分:1)

您可以遍历字典,将每个字典的结果附加到列表中,然后将列表作为一行添加到DataFrame中。

release