例えば、10個のキーと値のペアを持つ辞書があるとします。各エントリーはnumpy配列を保持しています。しかし、配列の長さは、それらすべてについて同じではありません。
各列が異なるエントリを保持するデータフレームを作成するにはどうすればよいですか?
試してみると
pd.DataFrame(my_dict)
と出る。
ValueError: arrays must all be the same length
これを克服する方法はありますか?Pandasが NaN
を使って、短いエントリのためにこれらのカラムを埋めることができれば幸いです。
Python 3.xでは、。
In [6]: d = dict( A = np.array([1,2]), B = np.array([1,2,3,4]) )
In [7]: DataFrame(dict([ (k,Series(v)) for k,v in d.items() ]))
Out[7]:
A B
0 1 1
1 2 2
2 NaN 3
3 NaN 4
Python 2.xでは:。
d.items()を
d.iteritems()` に置き換えてください。
そのための簡単な方法をご紹介します。
In[20]: my_dict = dict( A = np.array([1,2]), B = np.array([1,2,3,4]) )
In[21]: df = pd.DataFrame.from_dict(my_dict, orient='index')
In[22]: df
Out[22]:
0 1 2 3
A 1 2 NaN NaN
B 1 2 3 4
In[23]: df.transpose()
Out[23]:
A B
0 1 1
1 2 2
2 NaN 3
3 NaN 4
これはOP'の質問に直接答えるものではありませんが。私の場合、不等間隔の配列があったときに、これが素晴らしい解決策であることがわかりましたので、共有したいと思います。
In [31]: d = {'one' : Series([1., 2., 3.], index=['a', 'b', 'c']),
....: 'two' : Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
....:
In [32]: df = DataFrame(d)
In [33]: df
Out[33]:
one two
a 1 1
b 2 2
c 3 3
d NaN 4