2013-05-28 6 views
42

대신에 선택된 열을 DataFrame으로 유지 팬더 데이터 프레임 (예 : df.iloc[:, 0], df['A'] 또는 df.A 등)에서 단일 열을 선택하면 결과 벡터가 자동으로 단일 열 대신 계열로 변환됩니다 DataFrame. 그러나, 나는 DataFrame을 입력 인수로 취하는 몇 가지 함수를 작성 중이다. 따라서 직렬 대신 DataFrame을 단일 열로 처리하여 df.columns에 액세스 할 수 있다고 가정 할 수 있습니다. 지금은 pd.DataFrame(df.iloc[:, 0]) 같은 것을 사용하여 Series를 DataFrame으로 명시 적으로 변환해야합니다. 이것은 가장 깨끗한 방법처럼 보이지 않습니다. 결과가 시리즈가 아닌 단일 열 DataFrame이되도록 DataFrame에서 직접 색인을 생성하는 좀 더 우아한 방법이 있습니까?Python pandas : Series

+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

불편을 끼쳐 드려 죄송 합니다만,이 문제에 관해서는 정말 빠른 질문입니다. 나는 여분의'[]'가 결과를''Series' 대신에'DataFrame'으로 만드는 것을 보았습니다. 그러나 판다 문서에서는 이런 종류의 인덱싱 문법이 논의 되었습니까? 나는이 색인 생성 기법에 대한 "공식"이름을 얻으려는 것이므로 실제로 이해할 수 있습니다. 고마워! –

+2

@sparc_spread http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics "[]에 열 목록을 전달하여 해당 순서대로 열을 선택할 수 있습니다." 이름이 있는지 확실하지 않습니다! –

+0

그래, 그게 하나도없는 것 같아 -하지만 지금부터 계속 사용할거야. 얼마나 많은 것들이 API와 문서에 묻혀 있는지 놀랍습니다. 고마워! –

관련 문제