2013-05-28 55 views
42

從熊貓數據框中選擇單個列(如df.iloc[:, 0],df['A']df.A等)時,生成的向量會自動轉換爲Series而不是單列數據幀。但是,我正在編寫一些將DataFrame作爲輸入參數的函數。因此,我更喜歡處理單列DataFrame而不是Series,以便該函數可以假設可以訪問df.columns。現在我必須使用類似pd.DataFrame(df.iloc[:, 0])的方式將Series明確轉換爲DataFrame。這似乎不是最乾淨的方法。有沒有更好的方法直接從DataFrame進行索引,以便結果是單列DataFrame而不是Series?Python熊貓:將選定的列保留爲DataFrame而不是系列

+6

df.iloc [:,[0]]或df [['A']]; df.A只會回饋一系列 – Jeff

回答

47

由於@Jeff提到有幾個方法可以做到這一點,但我建議使用LOC/ILOC更明確的(和早期引發錯誤,如果你嘗試一些曖昧):

In [10]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B']) 

In [11]: df 
Out[11]: 
    A B 
0 1 2 
1 3 4 

In [12]: df[['A']] 

In [13]: df[[0]] 

In [14]: df.loc[:, ['A']] 

In [15]: df.iloc[:, [0]] 

Out[12-15]: # they all return the same thing: 
    A 
0 1 
1 3 

後兩個在整數列名稱的情況下選擇刪除歧義(正是爲什麼創建loc/iloc)。例如:

In [16]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 0]) 

In [17]: df 
Out[17]: 
    A 0 
0 1 2 
1 3 4 

In [18]: df[[0]] # ambiguous 
Out[18]: 
    A 
0 1 
1 3 
+2

抱歉打擾你,但這只是一個非常快速的問題。我看到額外的'[]'如何使結果成爲'DataFrame'而不是'Series',但pandas文檔中的這種索引語法是在哪裏討論的?我只是想獲得這種索引技術的「官方」名稱,以便我真正理解它。謝謝! –

+2

@sparc_spread http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics「您可以將列的列表傳遞給[]以按照該順序選擇列。」我不確定這是否有名字! –

+0

是的,它看起來沒有 - 但我會從現在開始繼續使用它。令人驚訝的是API和文檔都埋藏了多少東西。謝謝! –