2017-07-26 9 views
1

私の質問にはdifferentのバリエーションがあります。しかし、私は私の願いが何らかの形で違っていて、旗を立てないことを願っています。 Python 2.7、Pandas、Dictionariesを使用しています。Pandas Dataframe列の操作と辞書への変換

boxNumber  Content 
[1.0, 2.0]  A 
[2.0, 4.5]  B 
[2.5, 3.0]  C 
[1.5, 2.5]  F 
[1.4, 4.5]  D 
[1.3, 3.2]  E 

今は{A:B、C:F、D:E}のような辞書を取得しなければならない。私は密接に以下に似た、データフレームを有しています。私はこれを次のようにしています。これをpandasデータフレームにシフトし、すべてのnull値の行を削除しました。

keys = ['A', 'B', 'C', 'F','D', 'E'] 

test1 = df[df.Content.str.match('A').shift(1).fillna(False)] 
test2 = df[df.Content.str.match('C').shift(1).fillna(False)] 
test3 = df[df.Content.str.match('D').shift(1).fillna(False)] 
values = [test1.Content.iloc[0], test2.Content.iloc[0],test3.Content.iloc[0] 
item1 = dict(zip(keys, values)) 
print(item1) 

私の出力は

{'A':'B', 'D':'E', 'C':'F'} 

あるしかし、私はORDERLESSのpython 2.7であるのdictのよう

{'A':'B', 'C':'F', 'D':'E'} 

を必要とする、私の最終的な出力もORDERLESSになります! OrderedDict()はいいです。それは通常のdictである必要があります。これには何か解決策はありますか? パンダを使ってドロップするだけですか?

+0

私は問題が何かを得ることはありません。 B '、' C ':' F '、' D ':' E '} == {' A ':' B '、' D ':' E '、' C ':' F '} 'なぜ注文が必要ですか? –

+0

'A'、 'B'、 'C​​'、 'D'、 'E'、 'F'はすべてPDFから抽出されたjsonなので...それらは例です... Aは名前、Bは最後の名前...次に "年齢"のDが来る... Eは#age ... – neutralCreep

答えて

0

辞書は本質的に順序付けられていません。したがって、2つの辞書は同等です。あなたはcollectionsモジュール

from collections import OrderedDict 

OrderedDict(zip(df.Content.iloc[::2], df.Content.iloc[1::2])) 

OrderedDict([(u'A', u'B'), (u'C', u'F'), (u'D', u'E')]) 

それは辞書のように動作しますが、順序を維持からOrderedDictを検討する必要があります。順番を気にしません

dict(zip(df.Content.iloc[::2], df.Content.iloc[1::2])) 

{u'A': u'B', u'C': u'F', u'D': u'E'} 

:とは対照的に

+0

OrderedDict()以外の方法はありませんか? – neutralCreep

+0

私は辞書の詳細を読むことになりました。これが行く方法に思えました...ありがとう – neutralCreep

関連する問題