454

次のような Python 辞書があります。

{u'2012-06-08': 388,
 u'2012-06-09': 388,
 u'2012-06-10': 388,
 u'2012-06-11': 389,
 u'2012-06-12': 389,
 u'2012-06-13': 389,
 u'2012-06-14': 389,
 u'2012-06-15': 389,
 u'2012-06-16': 389,
 u'2012-06-17': 389,
 u'2012-06-18': 390,
 u'2012-06-19': 390,
 u'2012-06-20': 390,
 u'2012-06-21': 390,
 u'2012-06-22': 390,
 u'2012-06-23': 390,
 u'2012-06-24': 390,
 u'2012-06-25': 391,
 u'2012-06-26': 391,
 u'2012-06-27': 391,
 u'2012-06-28': 391,
 u'2012-06-29': 391,
 u'2012-06-30': 391,
 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}

キーはUnicodeの日付で、値は整数です。日付とそれに対応する値を2つの別々の列にすることで、これをパンダデータフレームに変換したいと思います。例: col1: Dates col2: DateValue (日付は Unicode のままで、datevalues は整数のままです)

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

この方向での助けをいただければ幸いです。パンダのドキュメントでこれを支援するリソースを見つけることができません。

1 つの解決策は、この dict の各キーと値のペアを dict に変換して、構造全体が dict の dict になるようにすることです。その後、各行を個別にデータフレームに追加できます。しかし、これを行うためのより簡単な方法とより直接的な方法があるかどうかを知りたいです。

これまでのところ、辞書をシリーズオブジェクトに変換しようとしましたが、これは列間の関係を維持していないようです:

s  = Series(my_dict,index=my_dict.keys())
4

16 に答える 16

275

キーをデータフレームの列にし、値を行の値にするパンダデータフレームに辞書を変換するときは、次のように辞書を括弧で囲むだけです。

>>> dict_ = {'key 1': 'value 1', 'key 2': 'value 2', 'key 3': 'value 3'}
>>> pd.DataFrame([dict_])

    key 1     key 2     key 3
0   value 1   value 2   value 3

それは私にいくつかの頭痛の種を救ったので、それが誰かを助けることを願っています!

編集:パンダのドキュメントdataでは、DataFrame コンストラクターのパラメーターの 1 つのオプションは、辞書のリストです。ここでは、辞書を 1 つ含むリストを渡しています。

于 2017-10-05T03:53:26.540 に答える
148

別の回答で説明したように、pandas.DataFrame()ここで直接使用すると、あなたが思うように動作しません。

あなたができることは、で使用することpandas.DataFrame.from_dictですorient='index'

In[7]: pandas.DataFrame.from_dict({u'2012-06-08': 388,
 u'2012-06-09': 388,
 u'2012-06-10': 388,
 u'2012-06-11': 389,
 u'2012-06-12': 389,
 .....
 u'2012-07-05': 392,
 u'2012-07-06': 392}, orient='index', columns=['foo'])
Out[7]: 
            foo
2012-06-08  388
2012-06-09  388
2012-06-10  388
2012-06-11  389
2012-06-12  389
........
2012-07-05  392
2012-07-06  392
于 2015-09-02T03:07:48.990 に答える
16

Pandas には、辞書をデータ フレームに変換する組み込み関数があります。

pd.DataFrame.from_dict(dictionaryObject,orient='index')

データについては、以下のように変換できます。

import pandas as pd
your_dict={u'2012-06-08': 388,
 u'2012-06-09': 388,
 u'2012-06-10': 388,
 u'2012-06-11': 389,
 u'2012-06-12': 389,
 u'2012-06-13': 389,
 u'2012-06-14': 389,
 u'2012-06-15': 389,
 u'2012-06-16': 389,
 u'2012-06-17': 389,
 u'2012-06-18': 390,
 u'2012-06-19': 390,
 u'2012-06-20': 390,
 u'2012-06-21': 390,
 u'2012-06-22': 390,
 u'2012-06-23': 390,
 u'2012-06-24': 390,
 u'2012-06-25': 391,
 u'2012-06-26': 391,
 u'2012-06-27': 391,
 u'2012-06-28': 391,
 u'2012-06-29': 391,
 u'2012-06-30': 391,
 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}

your_df_from_dict=pd.DataFrame.from_dict(your_dict,orient='index')
print(your_df_from_dict)
于 2017-12-20T10:07:33.153 に答える
8

次のように、辞書のキーと値を新しいデータフレームに渡すこともできます。

import pandas as pd

myDict = {<the_dict_from_your_example>]
df = pd.DataFrame()
df['Date'] = myDict.keys()
df['DateValue'] = myDict.values()
于 2017-01-03T08:09:05.330 に答える