2016-07-17 5 views
1

私は次の辞書を持っていますが、どのようにして4列のDataFrameに変換できますか? (列= [ '国'、 '日付'、 '2Y'、 '10Y']私はpd.DataFrame(温度)とpd.DataFrame.from_dict(TEMP)を試してみたDataFrameに辞書を転送しますか?

temp 
    {'Germany':   date 2y 10y 
    0 2004-02-01 2.47 4.22 
    1 2004-03-01 2.22 4.05 
    2 2004-04-01 2.20 3.96 
    ..   ... ... ... 
    149 2016-07-01 -0.65 -0.13 

    [150 rows x 3 columns], 'Japan':   date 2y 10y 
    0 2004-02-01 0.07 1.32 
    1 2004-03-01 0.05 1.26 
    2 2004-04-01 0.10 1.42 
    ..   ... ... ... 
    148 2016-06-01 -0.24 -0.12 
    149 2016-07-01 -0.33 -0.25 
type(temp) 
    dict 

。どちらのリターンエラー。

答えて

2

をあなたがreset_indexrenameconcatを使用することができます。

df1 = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4]}) 
df2 = pd.DataFrame({'a': [2,4,5], 'b': [5,6,8]}) 
temp = {'x': df1, 'y': df2} 

print (temp) 

print (pd.concat(temp) 
     .reset_index(level=1,drop=True) 
     .reset_index() 
     .rename(columns={'index':'country'})) 

    country a b 
0  x 1 2 
1  x 2 3 
2  x 3 4 
3  y 2 5 
4  y 4 6 
5  y 5 8 

別の解決策を、設定されたインデックス名で(pandas0.18.0の新機能)rename_axisによって:

print (pd.concat(temp) 
     .rename_axis(('country','temp')) 
     .reset_index(level=1,drop=True) 
     .reset_index()) 

    country a b 
0  x 1 2 
1  x 2 3 
2  x 3 4 
3  y 2 5 
4  y 4 6 
5  y 5 8 
1

辞書にデータフレームがあると思われる場合は、辞書をデータフレームに縮小する1つの方法は、辞書をループし、各サブ辞書に新しい列を作成して連結することです:

import pandas as pd 
df = pd.DataFrame() 
for k, v in temp.items(): 
    v['country'] = k 
    df = pd.concat([df, v]) 

同様の例:

df1 = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4]}) 
df2 = pd.DataFrame({'a': [2,4,5], 'b': [5,6,8]}) 
temp = {'x': df1, 'y': df2} 

temp  
#{'x': a b 
# 0 1 2 
# 1 2 3 
# 2 3 4, 'y': a b 
# 0 2 5 
# 1 4 6 
# 2 5 8} 
与え

df.reset_index() 

# a b country 
#0 1 2 x 
#1 2 3 x 
#2 3 4 x 
#3 2 5 y 
#4 4 6 y 
#5 5 8 y 
関連する問題