2017-07-26 1257 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:電子}。我以下面的方式來解決這個問題。我把它轉換成熊貓數據框,刪除了所有的空值行。

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'} 

但我需要

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

作爲一個字典是無序的python 2.7,我最後的輸出,也成爲無序! OrderedDict()不好。它需要是一個正常的字典。有沒有解決這個問題的方法? 或者我應該只使用熊貓?

+0

我不明白問題所在。 '{'A':'B','C':'F','D':'E'} == {'A':'B','D':'E','C':' F'}'爲什麼需要訂購? –

+0

因爲'A','B','C','D','E','F'都是從PDF中提取的json ...這些都是例子...... A可以是Name,B可以是最後的名字...然後來到D,這是「年齡」... E是#age ... – neutralCreep

回答

0

字典本質上是無序的。因此,這兩本字典是相同的。你可能想從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

相關問題