티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Selecting multiple columns in a Pandas dataframe
Pandas 데이터 프레임에서 여러 열 선택
문제 내용
How do I select columns a
and b
from df
, and save them into a new dataframe df1
?
df에서 열 a와 b를 선택하고 새 데이터 프레임 df1에 저장하려면 어떻게 해야 합니까?
index a b c
1 2 3 4
2 3 4 5
Unsuccessful attempt:
시도 실패:
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
높은 점수를 받은 Solution
The column names (which are strings) cannot be sliced in the manner you tried.
열 이름(문자열)은 시도한 방법으로 잘라낼 수 없습니다.
Here you have a couple of options. If you know from context which variables you want to slice out, you can just return a view of only those columns by passing a list into the __getitem__
syntax (the []'s).
여기 몇 가지 옵션이 있습니다. 잘라낼 변수를 컨텍스트에서 알고 있는 경우 목록을 __getitem__ 구문([]'s)에 전달하여 해당 열만 표시할 수 있습니다.
df1 = df[['a', 'b']]
Alternatively, if it matters to index them numerically and not by their name (say your code should automatically do this without knowing the names of the first two columns) then you can do this instead:
또는 이름이 아닌 숫자로 인덱싱하는 것이 중요한 경우(코드가 처음 두 열의 이름을 알지 못하고 자동으로 이 작업을 수행해야 한다고 가정) 다음과 같이 수행할 수 있습니다.
df1 = df.iloc[:, 0:2] # Remember that Python does not slice inclusive of the ending index.
Additionally, you should familiarize yourself with the idea of a view into a Pandas object vs. a copy of that object. The first of the above methods will return a new copy in memory of the desired sub-object (the desired slices).
또한 Pandas 개체와 해당 개체의 복사본에 대한 보기의 개념에 익숙해져야 합니다. 위의 방법 중 첫 번째 방법은 원하는 하위 개체(원하는 조각)의 메모리에 새 복사본을 반환합니다.
Sometimes, however, there are indexing conventions in Pandas that don't do this and instead give you a new variable that just refers to the same chunk of memory as the sub-object or slice in the original object. This will happen with the second way of indexing, so you can modify it with the .copy()
method to get a regular copy. When this happens, changing what you think is the sliced object can sometimes alter the original object. Always good to be on the look out for this.
그러나 때때로 Pandas에는 이를 수행하지 않고 대신 원본 객체의 하위 객체 또는 슬라이스와 동일한 메모리 청크를 참조하는 새 변수를 제공하는 인덱싱 규칙이 있습니다. 이것은 인덱싱의 두 번째 방법에서 발생하므로 .copy() 메서드로 수정하여 일반 복사본을 얻을 수 있습니다. 이런 일이 발생하면 슬라이스된 개체라고 생각하는 것을 변경하면 때때로 원래 개체가 변경될 수 있습니다. 항상 이것을 조심하는 것이 좋습니다.
df1 = df.iloc[0, 0:2].copy() # To avoid the case where changing df1 also changes df
To use iloc
, you need to know the column positions (or indices). As the column positions may change, instead of hard-coding indices, you can use iloc
along with get_loc
function of columns
method of dataframe object to obtain column indices.
iloc를 사용하려면 열 위치(또는 인덱스)를 알아야 합니다. 열 위치가 변경될 수 있으므로 하드 코딩 인덱스 대신 iloc를 데이터 프레임 객체의 열 메서드 get_loc 함수와 함께 사용하여 열 인덱스를 얻을 수 있습니다.
{df.columns.get_loc(c): c for idx, c in enumerate(df.columns)}
Now you can use this dictionary to access columns through names and using iloc
.
이제 이 딕셔너리를 사용하여 이름과 iloc을 사용하여 열에 액세스할 수 있습니다.
가장 최근 달린 Solution
To exclude some columns you can drop them in the column index. For example:
일부 열을 제외하려면 열 인덱스에서 해당 열을 삭제할 수 있습니다. 예:
A B C D
0 1 10 100 1000
1 2 20 200 2000
Select all except two:
두 개를 제외한 모든 항목 선택:
df[df.columns.drop(['B', 'D'])]
Output:
출력:
A C
0 1 100
1 2 200
You can also use the method truncate to select middle columns:
truncate 함수를 사용하여 가운데 열을 선택할 수도 있습니다.
df.truncate(before='B', after='C', axis=1)
Output:
출력:
B C
0 10 100
1 20 200
출처 : https://stackoverflow.com/questions/11285613/selecting-multiple-columns-in-a-pandas-dataframe
'개발 > 파이썬' 카테고리의 다른 글
type object 'datetime.datetime' has no attribute 'datetime' 오류 수정하기 (0) | 2022.12.05 |
---|---|
ImportError: numpy.core.multiarray failed to import 수정하기 (0) | 2022.12.05 |
Pandas 데이터 프레임의 총 행의 수 얻기 (0) | 2022.12.05 |
딕셔너리 내포(한 줄 for문)로 만들기 (0) | 2022.12.04 |
파이썬 추상 클래스에서 추상 속성을 만드는 방법 (0) | 2022.12.04 |