2017-03-06 8 views
2

私は、次の列を持つ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ループの結果であり、それらは一意の行として追加されるべきです。

答えて

4

代替コンストラクタpandas.DataFrame.from_dictを使用してください。ただ、

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 

EDIT実際

:その後、ちょうど適切な "東洋" の引数を渡すことを確認してください

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'}) 

:で始まるように、リストにあなたの "行" を構築通常のコンストラクタはうまく動作し、引数を必要としないことに気付きました!

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 
+0

それは私が必要とするようには動作しません。例えば、すべてのdictは4つのdictの組み合わせです: 'z = {** adresa、** d、** pret、** autor}'既存のリスト '行'は最後のdictを書き換えます。列の数とその名前は常に同じままにする必要がありますが、それらは変化しています。 – Sinchetru

+0

@Sinchetruなぜそれが問題なのかわかりません... –

+0

@Sinchetruリストに新しい 'z'を追加すると最後の' dict'を書き直す方法はありません。それは間違いなく起こるべきではありません。あなたは何をしているのですか? –

1

辞書をループオーバーし、各辞書の結果をリストに追加してから、そのリストをDataFrameの行として追加することができます。

dflist = [] 
for dic in dictionarylist: 
    rlist = [] 
    for key in keylist: 
     if dic[key] is None: 
      rlist.append(None) 
     else: 
      rlist.append(dic[key]) 

    dflist.append(rlist) 

df = pd.DataFrame(dflist) 
+0

私はすべての前処理の必要はないと思います。 'DataFrame'代理人は' dict'のリストをうまく扱います。 –

+0

'pandas.DataFrame.from_dict'についてはわかりませんでした。おそらく 'DataFrame.from_dict'はそれをより効率的に実行しますが、これは関数が効果的に行うことです。 – Michael

+0

まあ、私が発見したように、通常の 'pd.DataFrame'コンストラクタはうまく動作します。 –

関連する問題