Python pandas : 선택한 열을 Series 대신 DataFrame으로 유지
pandas DataFrame (예 df.iloc[:, 0]
: df['A']
, 또는 df.A
등) 에서 단일 열을 선택 하면 결과 벡터가 단일 열 DataFrame 대신 Series로 자동 변환됩니다. 그러나 DataFrame을 입력 인수로 사용하는 일부 함수를 작성하고 있습니다. 따라서 함수가 df.columns에 액세스 할 수 있다고 가정 할 수 있도록 Series 대신 단일 열 DataFrame을 처리하는 것을 선호합니다. 지금 당장은 .NET과 같은 것을 사용하여 Series를 DataFrame으로 명시 적으로 변환해야합니다 pd.DataFrame(df.iloc[:, 0])
. 이것은 가장 깨끗한 방법처럼 보이지 않습니다. 결과가 Series 대신 단일 열 DataFrame이되도록 DataFrame에서 직접 인덱싱하는 더 우아한 방법이 있습니까?
@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
으로 앤디 헤이든은 권장 인덱스 출력 (싱글 - 원주) dataframe가 갈 수있는 방법에 .iloc / .loc를 활용; 주목할 또 다른 점은 인덱스 위치를 표현하는 방법입니다. Dataframe으로 인덱싱 할 인수 값을 지정하는 동안 나열된 인덱스 레이블 / 위치 를 사용합니다 . 그렇게하지 않으면 'pandas.core.series.Series'가 반환됩니다.
입력:
A_1 = train_data.loc[:,'Fraudster']
print('A_1 is of type', type(A_1))
A_2 = train_data.loc[:, ['Fraudster']]
print('A_2 is of type', type(A_2))
A_3 = train_data.iloc[:,12]
print('A_3 is of type', type(A_3))
A_4 = train_data.iloc[:,[12]]
print('A_4 is of type', type(A_4))
산출:
A_1 is of type <class 'pandas.core.series.Series'>
A_2 is of type <class 'pandas.core.frame.DataFrame'>
A_3 is of type <class 'pandas.core.series.Series'>
A_4 is of type <class 'pandas.core.frame.DataFrame'>
'program tip' 카테고리의 다른 글
C ++ 함수에서 정확한 "반환"순간 (0) | 2020.11.12 |
---|---|
특정 경로의 모든 파일과 디렉토리를 빠르게 가져옵니다. (0) | 2020.11.12 |
Visual Studio 동일한 토큰 강조 표시 (0) | 2020.11.12 |
동적 프록시 클래스는 무엇이며 왜 사용합니까? (0) | 2020.11.12 |
빠른 소인수 분해 모듈 (0) | 2020.11.12 |