Python 辞書をデータフレームに変換する 質問する

Python 辞書をデータフレームに変換する 質問する

Python 辞書があります:

{u'2012-07-01': 391,
 u'2012-07-02': 392,
 u'2012-07-03': 392,
 u'2012-07-04': 392,
 u'2012-07-05': 392,
 u'2012-07-06': 392}

日付とそれに対応する値を 2 つの別々の列として持つことで、これを pandas データフレームに変換したいと思います。予想される結果は次のようになります。

     Date         DateValue
0    2012-07-01    391
1    2012-07-02    392
2    2012-07-03    392
.    2012-07-04    392
.    ...           ...

これを直接行う方法はありますか?

ベストアンサー1

ここでのエラーは、スカラー値を使用して DataFrame コンストラクターを呼び出すためです (値はリスト/辞書/... であることが想定されています。つまり、複数の列があります)。

pd.DataFrame(d)
ValueError: If using all scalar values, you must must pass an index

辞書から項目(つまり、キーと値のペア)を取得できます。

In [11]: pd.DataFrame(d.items())  # or list(d.items()) in python 3
Out[11]:
            0    1
0  2012-07-01  391
1  2012-07-02  392
2  2012-07-03  392
3  2012-07-04  392
4  2012-07-05  392
5  2012-07-06  392

In [12]: pd.DataFrame(d.items(), columns=['Date', 'DateValue'])
Out[12]:
         Date  DateValue
0  2012-07-01        391
1  2012-07-02        392
2  2012-07-03        392
3  2012-07-04        392
4  2012-07-05        392
5  2012-07-06        392

しかし、Series コンストラクターを渡す方が理にかなっていると思います。

In [20]: s = pd.Series(d, name='DateValue')

In [21]: s
Out[21]:
2012-07-01    391
2012-07-02    392
2012-07-03    392
2012-07-04    392
2012-07-05    392
2012-07-06    392
Name: DateValue, dtype: int64

In [22]: s.index.name = 'Date'

In [23]: s.reset_index()
Out[23]:
         Date  DateValue
0  2012-07-01        391
1  2012-07-02        392
2  2012-07-03        392
3  2012-07-04        392
4  2012-07-05        392
5  2012-07-06        392

おすすめ記事