다른 열에 데이터가 있지만 다른 변수에 저장하기 위해 추출하는 방법을 모르겠습니다.
index a b c
1 2 3 4
2 3 4 5
어떻게 선택합니까 'a'
, 'b'
그리고 DF1에 저장?
나는 시도했다
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
아무것도 작동하지 않는 것 같습니다.
답변
시도한 방식으로 열 이름 (문자열)을 슬라이스 할 수 없습니다.
여기 몇 가지 옵션이 있습니다. 컨텍스트에서 어떤 변수를 분리 하려는지 알고 있다면 __getitem__
구문 ([])에 목록을 전달하여 해당 열에 대한보기 만 반환하면됩니다 .
df1 = df[['a','b']]
또는 이름이 아닌 숫자로 색인을 생성 해야하는 경우 (코드가 처음 두 열의 이름을 몰라도 자동으로 수행해야 함) 대신 다음을 수행 할 수 있습니다.
df1 = df.iloc[:,0:2] # Remember that Python does not slice inclusive of the ending index.
또한 Pandas 객체에 대한 관점과 해당 객체의 사본에 대한 아이디어를 숙지해야합니다. 위의 첫 번째 방법은 원하는 하위 오브젝트 (원하는 슬라이스)의 메모리에 새 사본을 리턴합니다.
그러나 팬더에는 인덱싱 규칙이있어이를 수행하지 않고 대신 원래 오브젝트의 하위 오브젝트 또는 슬라이스와 동일한 메모리 청크를 참조하는 새 변수를 제공합니다. 이는 두 번째 색인 작성 방법으로 발생하므로 copy()
정기적 인 사본을 얻기 위해 함수를 사용하여 수정할 수 있습니다 . 이 경우 슬라이스 개체라고 생각되는 것을 변경하면 원래 개체가 변경 될 수 있습니다. 항상 조심해야합니다.
df1 = df.iloc[0,0:2].copy() # To avoid the case where changing df1 also changes df
을 사용하려면 iloc
열 위치 (또는 인덱스)를 알아야합니다. 하드 코딩 인덱스 대신 열 위치가 변경 될 수 있으므로 데이터 프레임 객체 의 메서드 기능 iloc
과 함께 사용 하여 열 인덱스를 얻을 수 있습니다.get_loc
columns
{df.columns.get_loc(c):c for idx, c in enumerate(df.columns)}
이제이 사전을 사용하여 이름을 사용하고을 사용하여 열에 액세스 할 수 있습니다 iloc
.
답변
버전 0.11.0부터는 인덱서를 사용하여 시도한 방식으로 열 을 슬라이스 할 수 있습니다.loc
.
df.loc[:, 'C':'E']
~에 해당
df[['C', 'D', 'E']] # or df.loc[:, ['C', 'D', 'E']]
를 C
통해 열 을 반환합니다 E
.
임의로 생성 된 DataFrame에 대한 데모 :
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)),
columns=list('ABCDEF'),
index=['R{}'.format(i) for i in range(100)])
df.head()
Out:
A B C D E F
R0 99 78 61 16 73 8
R1 62 27 30 80 7 76
R2 15 53 80 27 44 77
R3 75 65 47 30 84 86
R4 18 9 41 62 1 82
C에서 E로 열을 가져 오려면 정수 슬라이싱과 달리 열에 ‘E’가 포함되어 있습니다.
df.loc[:, 'C':'E']
Out:
C D E
R0 61 16 73
R1 30 80 7
R2 80 27 44
R3 47 30 84
R4 41 62 1
R5 5 58 0
...
레이블을 기반으로 행을 선택하는 것과 동일합니다. 해당 열에서 ‘R6’에서 ‘R10’행을 가져옵니다.
df.loc['R6':'R10', 'C':'E']
Out:
C D E
R6 51 27 31
R7 83 19 18
R8 11 67 65
R9 78 27 29
R10 7 16 94
.loc
또한 부울 배열을 허용하므로 배열의 해당 항목이 인 열을 선택할 수 있습니다 True
. 예를 들어 열 이름이 목록에 있으면 True를 df.columns.isin(list('BCD'))
반환 array([False, True, True, True, False, False], dtype=bool)
합니다 ['B', 'C', 'D']
. 그렇지 않으면 거짓입니다.
df.loc[:, df.columns.isin(list('BCD'))]
Out:
B C D
R0 78 61 16
R1 27 30 80
R2 53 80 27
R3 65 47 30
R4 9 41 62
R5 78 5 58
...
답변
열 이름 ( df.columns
)이 이라고 가정하면 ['index','a','b','c']
원하는 데이터는 세 번째 및 네 번째 열에 있습니다. 스크립트가 실행될 때 이름을 모르는 경우이 작업을 수행 할 수 있습니다
newdf = df[df.columns[2:4]] # Remember, Python is 0-offset! The "3rd" entry is at slot 2.
EMS가에서 지적한대로 그의 대답 , df.ix
더 간결하게 열을 약간 슬라이스,하지만 .columns
그것은 바닐라 1-D 파이썬 목록 색인 / 슬라이스 구문을 사용하기 때문에 슬라이스 인터페이스는 더 자연스러운 수 있습니다.
경고 : 열의 'index'
이름이 잘못되었습니다 DataFrame
. 동일한 레이블이 실제 df.index
속성 인 Index
배열 에도 사용 됩니다. 따라서 열이 반환되고 df['index']
실제 DataFrame 색인이에 의해 반환됩니다 df.index
. 은 Index
특별한 종류의 Series
그것의 요소의 값을 검색에 최적화 된. df.index의 경우 레이블로 행을 조회합니다. 해당 df.columns
속성은 pd.Index
레이블로 열을 조회하기위한 배열 이기도합니다 .
답변
In [39]: df
Out[39]:
index a b c
0 1 2 3 4
1 2 3 4 5
In [40]: df1 = df[['b', 'c']]
In [41]: df1
Out[41]:
b c
0 3 4
1 4 5
답변
나는이 질문이 상당히 오래되었다는 것을 알고 있지만 최신 버전의 팬더에는 정확하게 이것을 할 수있는 쉬운 방법이 있습니다. 열 이름 (문자열) 은 원하는 방식으로 슬라이스 할 수 있습니다.
columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)
답변
제거 할 열 목록을 제공 drop()
하고 Pandas DataFrame 의 함수를 사용하여 필요한 열만 사용하여 DataFrame을 다시 반환 할 수 있습니다 .
그냥 말
colsToDrop = ['a']
df.drop(colsToDrop, axis=1)
다만 열이있는 DataFrame을 반환 b
하고 c
.
답변
팬더와 함께
재치 열 이름
dataframe[['column1','column2']]
iloc 및 색인 번호가있는 특정 열로 선택하려면 다음을 수행하십시오.
dataframe.iloc[:,[1,2]]
로크 열 이름과 같이 사용할 수 있습니다
dataframe.loc[:,['column1','column2']]