2013-05-28 11 views
42

Gdy wybranie jednej kolumny z DataFrame PANDAS (powiedzmy df.iloc[:, 0], df['A'] lub df.A itp), otrzymany wektor jest automatycznie przekształca się w serii, a nie z pojedynczej kolumny Ramka danych. Jednakże piszę niektóre funkcje, które pobierają DataFrame jako argument wejściowy. Dlatego wolę radzić sobie z jedną kolumną DataFrame zamiast z Serii, aby funkcja mogła przyjąć, że df.columns jest dostępny. Teraz muszę jawnie przekonwertować serię na DataFrame, używając czegoś takiego jak pd.DataFrame(df.iloc[:, 0]). To nie wydaje się być najbardziej czystą metodą. Czy istnieje bardziej elegancki sposób indeksowania bezpośrednio z DataFrame, tak aby wynik był jednokolumnowy DataFrame zamiast Series?Python pandy Przechowywać wybrany kolumnę jako DataFrame zamiast serii

+6

df.iloc [,, [0]] lub df [["A"]]; df.A tylko zwróci serię jednak – Jeff

Odpowiedz

47

Jak @Jeff wspomina istnieje kilka sposobów, aby to zrobić, ale zalecamy stosowanie LOC/iloc być bardziej wyraźny (i podnieść błędów na początku, jeśli próbujesz coś dwuznacznego):

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 

dwa ostatnie wybory usuwają niejednoznaczność w przypadku nazw całkowitych kolumn (właśnie dlaczego zostały utworzone loc/iloc). Na przykład:

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

Przepraszam, że przeszkadzam, ale po prostu bardzo szybkie pytanie wokół tego. Widzę, że dodatkowe '[]' sprawia, że ​​wynik jest 'DataFrame' zamiast' Series', ale gdzie w dokumentacji pandy jest omawiana tego rodzaju składnia indeksująca? Po prostu próbuję uzyskać "oficjalną" nazwę tej techniki indeksowania, tak, że naprawdę to rozumiem. Dzięki! –

+2

@sparc_spread http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics "Możesz przekazać listę kolumn do [], aby wybrać kolumny w tej kolejności." Nie jestem pewien, czy ma to imię! –

+0

Tak, wygląda na to, że go nie ma - ale będę go używał od teraz. Niesamowite, ile rzeczy jest pochowanych w API i dokumentach. Dzięki! –

Powiązane problemy