2013-05-28 22 views
42

Quando si seleziona una singola colonna da un DataFrame panda (ad esempio df.iloc[:, 0], df['A'] o df.A, ecc.), Il vettore risultante viene automaticamente convertito in una Serie anziché in una singola colonna dataframe. Tuttavia, sto scrivendo alcune funzioni che prendono un DataFrame come argomento di input. Pertanto, preferisco trattare DataFrame a colonna singola invece di Serie in modo che la funzione possa assumere che df.columns sia accessibile. In questo momento devo convertire esplicitamente la serie in un DataFrame usando qualcosa come pd.DataFrame(df.iloc[:, 0]). Questo non sembra il metodo più pulito. Esiste un modo più elegante di indicizzare direttamente da un DataFrame in modo che il risultato sia un DataFrame a colonna singola invece di Serie?Panda Python: mantenere la colonna selezionata come DataFrame invece di Serie

+6

df.iloc [:, [0]] o df [['A']]; df.A restituirà solo una serie tuttavia – Jeff

risposta

47

Come @Jeff menzioni ci sono alcuni modi per fare questo, ma mi consiglia di utilizzare loc/iLOC essere più espliciti (e sollevare gli errori presto se il vostro cercando qualcosa di ambiguo):

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 

Gli ultimi due le scelte rimuovono l'ambiguità nel caso di nomi di colonne intere (precisamente perché sono stati creati loc/iloc). Ad esempio:

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

Mi dispiace disturbarla, ma solo una domanda molto veloce su questo. Vedo che l'extra '[]' rende il risultato un 'DataFrame' invece di un' Series', ma dove nei documenti panda è discusso questo tipo di sintassi di indicizzazione? Sto solo cercando di ottenere il nome "ufficiale" per questa tecnica di indicizzazione in modo che io lo capisca davvero. Grazie! –

+2

@sparc_spread http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics "Puoi passare un elenco di colonne a [] per selezionare le colonne in questo ordine." Non sono sicuro che questo abbia un nome! –

+0

Sì, sembra che non ce l'abbia, ma continuerò a usarlo da ora. Incredibile quanta roba è sepolta sia nell'API che nei documenti. Grazie! –

Problemi correlati