2017-08-15 78 views
1
data1 = {'key':['b','b','a','c','a','a','b'], 'data':range(7)} 
df1 = pd.DataFrame(data1) 

它被安排爲數據,然後按鍵。爲什麼它沒有安排在關鍵,然後數據?爲什麼在熊貓的DataFrame排列字符串之前?

我是否需要指定列?

+0

「關鍵」這個詞沒有什麼特別之處。如果你想通過「key」對數據框進行排序,那麼執行:'df1.sort_values('key')'。你可能會混淆「關鍵」和索引。 – DyZ

+1

'data1'是一個字典,因此它的元素沒有排序。 – Peaceful

+0

df1 = pd.DataFrame(data1,columns = ['key','data'])會給我數據後面的密鑰。 但如果我不指定列,那麼它通過鍵返回數據。 – JOHN

回答

2

data1是一本詞典,因此元素存儲在arbitrary order中。現在,你每次看到這個特定順序的原因是因爲如果沒有明確的列參數,熊貓frame constructorsort the dictionary keys

構造簡單的使用:

>>> sorted(['key', 'data']) 
['data', 'key'] 

所以你會每次得到的列相同的排序。您可以(必須)明確指定列參數,以按您想要的順序存儲它們。

>>> pd.DataFrame(data1, columns=['key', 'data']) 
    key data 
0 b  0 
1 b  1 
2 a  2 
3 c  3 
4 a  4 
5 a  5 
6 b  6 
0

您可以使用OrderedDictcollections庫,以確保我們保持相同的順序。

from collections import OrderedDict 

data1 = OrderedDict({'key': ['b','b','a','c','a','a','b'], 'data': range(7)}) 
df1 = pd.DataFrame(data1) 
df1 

    key data 
0 b  0 
1 b  1 
2 a  2 
3 c  3 
4 a  4 
5 a  5 
6 b  6