sourcecode

Panda 데이터 프레임에서 여러 열 선택

copyscript 2023. 1. 30. 22:16
반응형

Panda 데이터 프레임에서 여러 열 선택

How do I select columns 열을 선택하려면 어떻게 해야 합니까?a ★★★★★★★★★★★★★★★★★」b부에서df, , and save them into a new dataframe 새로운 데이터 프레임에 저장합니다.df1????

index  a   b   c
1      2   3   4
2      3   4   5

실패한 시도:

df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']

열 이름(문자열)은 시도한 방법으로 잘라낼 수 없습니다.

여기 몇 가지 옵션이 있습니다.슬라이스할 변수를 컨텍스트에서 알고 있는 경우 목록을 구문([])에 전달하여 해당 열의 뷰만 반환할 수 있습니다.

df1 = df[['a', 'b']]

또는 이름이 아닌 숫자로 인덱스를 작성하는 것이 중요한 경우(코드가 처음 두 열의 이름을 알지 못하고 자동으로 이 작업을 수행한다고 가정함) 대신 다음과 같이 할 수 있습니다.

df1 = df.iloc[:, 0:2] # Remember that Python does not slice inclusive of the ending index.

또한 판다 물체와 그 물체의 복사본에 대한 견해를 숙지해야 합니다.위의 첫 번째 메서드는 원하는 하위 개체(원하는 슬라이스)의 메모리에 새 복사본을 반환합니다.

그러나, 그러나, 이르지 않는 팬더에 대한 인덱싱 규칙이 있으며 원래 개체에 동일한 청크 또는 슬라이스 또는 슬라이스에 동일한 청크를 가리킨다.그러나 때때로 판다에는 이렇게 하지 않고 원래 개체의 하위 개체 또는 슬라이스와 동일한 메모리 덩어리를 참조하는 새로운 변수를 제공하는 색인 규칙이 있습니다.이것은 두 번째 인덱싱과 함께 발생할 것이며 업 째 덱 법 행 싱 으 수 되 this, will로 way indexing the of it므방 with happen the can you인번로 second modify with.copy()정규 복사본을 얻기 위한 방법 오브젝트가 .이 경우 슬라이스된 오브젝트라고 생각되는 것을 변경하면 원래 오브젝트가 변경될 수 있습니다.항상 조심하는 건 좋은 일이야

df1 = df.iloc[0, 0:2].copy() # To avoid the case where changing df1 also changes df

「」를 iloc열 위치(또는 인덱스)를 알아야 합니다.될 수 인덱스가 " "를 할 수 .iloc get_loccolumns데이터 프레임 개체의 메서드를 사용하여 열 인덱스를 가져옵니다.

{df.columns.get_loc(c): c for idx, c in enumerate(df.columns)}

이 이름을 , 그리고 을 사용해서 할 수 있게 되었습니다.iloc.

버전 0.11.0부터는 인덱서를 사용하여 시도한 방법으로 을 슬라이스할 수 있습니다.

df.loc[:, 'C':'E']

같은 컬럼을 가져옵니다.

df[['C', 'D', 'E']] # Mind, this makes a copy.

또는

df.loc[:, ['C', 'D', 'E']] # This does not make a copy (better).

됩니다.C through를 통해.E.


랜덤으로 생성된 Data Frame의 데모:

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을 사용할 도 있기 가 "Boolean"인 할 수 있습니다.True를 들어.df.columns.isin(list('BCD'))array([False, True, True, True, False, False], dtype=bool)열입니다. - 열 이름이 True입니다.['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 zero-offset! The "third" entry is at slot two.

EMS가 그의 답변에서 지적한 바와 같이,df.ix은 좀 하지만, ' 컬럼'은 '슬라이스 컬럼'입니다..columns슬라이싱 인터페이스는 바닐라 1차원 Python 목록 인덱싱/슬라이싱 구문을 사용하기 때문에 더 자연스러울 수 있습니다.

경고:'index'는 나쁜 이름이다.DataFrame 실제 라벨에도 됩니다.df.index 「」, 「」, 「Atribute,Index 그러면 에는 배 is가 됩니다. 그러면 당신의 컬럼은df['index'] 인덱스는 DataFrame에 의해 됩니다.df.indexA . ANIndex of of is is is is is is is is is의 특별한 입니다.Series요소 값 검색에 최적화되어 있습니다.labeldf.index로 합니다. ★★★df.columns는 「」도 .pd.Index배열: 레이블로 열을 검색합니다.

판다의 최신 버전에는 정확히 이것을 할 수 있는 쉬운 방법이 있다.열 이름(문자열)은 원하는 방식으로 잘라낼 수 있습니다.

columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)
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

팬더와 함께라면

위트 컬럼명

dataframe[['column1','column2']]

iloc 및 인덱스 번호가 있는 특정 열로 선택하려면:

dataframe.iloc[:,[1,2]]

loc column name은 다음과 같이 사용할 수 있습니다.

dataframe.loc[:,['column1','column2']]

.pandas.DataFrame.filter다음과 같이 열을 필터링하거나 정렬하는 방법:

df1 = df.filter(['a', 'b'])

이것은 메서드를 연결할 때도 매우 유용합니다.

할 수 .drop()Panda Data Frame 。

그냥 말했을 뿐인데

colsToDrop = ['a']
df.drop(colsToDrop, axis=1)

을 반환합니다.b ★★★★★★★★★★★★★★★★★」c.

drop방법은 여기에 기재되어 있습니다.

나는 이 방법이 매우 유용하다는 것을 알았다.

# iloc[row slicing, column slicing]
surveys_df.iloc [0:3, 1:4]

자세한 내용은 여기를 참조하십시오.

0부터 0.21.0을 .loc ★★★★★★★★★★★★★★★★★」[] 또는 개 , 라벨이 없는 됩니다..reindex질문에 대한 답변은 다음과 같습니다.

df1 = df.reindex(columns=['b','c'])

에서는 " " " 를 사용합니다..loc[list-of-labels], 「1」의 「1」의 「1」의 「1」의 「1」의 「1」의 「1」의 「1」의 「1」의 「1」의 「1」의 「1」이 됩니다).KeyError이되지 않으며 이 동작은 권장되지 않으며 경고 메시지가 표시됩니다.권장되는 대안은 다음과 같습니다..reindex().

자세한 내용은 인덱싱 및 데이터 선택에서 확인하십시오.

팬더도 쓸 수 있어요.

Data Frame을 만듭니다.

import pandas as pd
df = pd.DataFrame([[1, 2,5], [5,4, 5], [7,7, 8], [7,6,9]],
                  index=['Jane', 'Peter','Alex','Ann'],
                  columns=['Test_1', 'Test_2', 'Test_3'])

데이터 프레임:

       Test_1  Test_2  Test_3
Jane        1       2       5
Peter       5       4       5
Alex        7       7       8
Ann         7       6       9

이름으로 하나 이상의 열을 선택하려면:

df[['Test_1', 'Test_3']]

       Test_1  Test_3
Jane        1       5
Peter       5       5
Alex        7       8
Ann         7       9

다음 항목도 사용할 수 있습니다.

df.Test_2

열도 요.Test_2:

Jane     2
Peter    4
Alex     7
Ann      6

를 사용하여 이러한 행에서 열과 행을 선택할 수도 있습니다.이것을 「슬라이싱」이라고 부릅니다.컬럼에서 가져오는 것에 주의해 주세요.Test_1로로 합니다.Test_3:

df.loc[:, 'Test_1':'Test_3']

"슬라이스"는 다음과 같습니다.

       Test_1  Test_2  Test_3
Jane        1       2       5
Peter       5       4       5
Alex        7       7       8
Ann         7       6       9

만약 리를 원한다면Peter ★★★★★★★★★★★★★★★★★」AnnTest_1 ★★★★★★★★★★★★★★★★★」Test_3:

df.loc[['Peter', 'Ann'], ['Test_1', 'Test_3']]

다음과 같은 이점을 얻을 수 있습니다.

       Test_1  Test_3
Peter       5       5
Ann         7       9

및 으로 한 이 을 사용할 할 수 있습니다.df['b'][0]상상하시는 것처럼 간단합니다.

ㄴㄴㄴ데 하다'를 해도 됩니다.df.ix[0,'b'] - 혼용. - 혼용.

주의: v0.20 이후ix 위해 폐지되었습니다.lociloc.

df[['a', 'b']]  # Select all rows of 'a' and 'b'column 
df.loc[0:10, ['a', 'b']]  # Index 0 to 10 select column 'a' and 'b'
df.loc[0:10, 'a':'b']  # Index 0 to 10 select column 'a' to 'b'
df.iloc[0:10, 3:5]  # Index 0 to 10 and column 3 to 5
df.iloc[3, 3:5]  # Index 3 of column 3 to 5

써보세요.pandas.DataFrame.get(매뉴얼 참조):

import pandas as pd
import numpy as np

dates = pd.date_range('20200102', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
df.get(['A', 'C'])

하나의 다른 쉬운 접근법: 행 반복

반복 사용

 df1 = pd.DataFrame() # Creating an empty dataframe
 for index,i in df.iterrows():
    df1.loc[index, 'A'] = df.loc[index, 'A']
    df1.loc[index, 'B'] = df.loc[index, 'B']
    df1.head()

이전 답변에서 설명한 다양한 접근법은 사용자가 드롭 또는 서브셋할 컬럼 인덱스를 알고 있거나 사용자가 컬럼의 범위(예를 들어 'C' : 'E' 사이)를 사용하여 데이터 프레임을 서브셋하고 싶다는 가정에 기초하고 있습니다.

panders.DataFrame.drop()은 사용자가 정의한 컬럼 목록에 따라 데이터를 서브셋하는 옵션입니다(단, 항상 데이터 프레임의 복사본을 사용하고 inplace 파라미터를 True로 설정하지 않도록 주의해야 합니다).

또 다른 옵션은 panda.columns.difference()를 사용하는 것입니다.이것은 열 이름에 대해 차이를 설정하고 원하는 열을 포함하는 배열의 인덱스 유형을 반환합니다.해결책은 다음과 같습니다.

df = pd.DataFrame([[2,3,4], [3,4,5]], columns=['a','b','c'], index=[1,2])
columns_for_differencing = ['a']
df1 = df.copy()[df.columns.difference(columns_for_differencing)]
print(df1)

출력은 다음과 같습니다.

    b   c
1   3   4
2   4   5

df.pop()사용할 수도 있습니다.

>>> df = pd.DataFrame([('falcon', 'bird',    389.0),
...                    ('parrot', 'bird',     24.0),
...                    ('lion',   'mammal',   80.5),
...                    ('monkey', 'mammal', np.nan)],
...                   columns=('name', 'class', 'max_speed'))
>>> df
     name   class  max_speed
0  falcon    bird      389.0
1  parrot    bird       24.0
2    lion  mammal       80.5
3  monkey  mammal

>>> df.pop('class')
0      bird
1      bird
2    mammal
3    mammal
Name: class, dtype: object

>>> df
     name  max_speed
0  falcon      389.0
1  parrot       24.0
2    lion       80.5
3  monkey        NaN

★★★★★★를 사용해 .df.pop(c).

나는 그것에 대해 몇 가지 답을 보았지만, 한 가지는 여전히 불분명했다.관심 있는 칼럼을 어떻게 선택하시겠습니까?

이 문제에 대한 답은 목록을 사용하여 열을 참조할 수 있다는 것입니다.

print(extracted_features.shape)
print(extracted_features)

(63,)
['f000004' 'f000005' 'f000006' 'f000014' 'f000039' 'f000040' 'f000043'
 'f000047' 'f000048' 'f000049' 'f000050' 'f000051' 'f000052' 'f000053'
 'f000054' 'f000055' 'f000056' 'f000057' 'f000058' 'f000059' 'f000060'
 'f000061' 'f000062' 'f000063' 'f000064' 'f000065' 'f000066' 'f000067'
 'f000068' 'f000069' 'f000070' 'f000071' 'f000072' 'f000073' 'f000074'
 'f000075' 'f000076' 'f000077' 'f000078' 'f000079' 'f000080' 'f000081'
 'f000082' 'f000083' 'f000084' 'f000085' 'f000086' 'f000087' 'f000088'
 'f000089' 'f000090' 'f000091' 'f000092' 'f000093' 'f000094' 'f000095'
 'f000096' 'f000097' 'f000098' 'f000099' 'f000100' 'f000101' 'f000103']

아래 목록/NumPy 배열이 있습니다.extracted_features63번입니다. 세트는 그것을 하고 싶기 에 103컬럼, 103컬럼을 합니다.

dataset[extracted_features]

그리고 당신은 결국 이렇게 될 것이다

여기에 이미지 설명을 입력하십시오.

이것은 머신 러닝(구체적으로는 기능 선택)에서 자주 사용됩니다.다른 방법도 검토하고 싶습니다만, 이미 다른 Stack Overflower 유저에 의해서 커버되고 있다고 생각합니다.

합니다.df는, 데이터 프레임을 , 프레임이라고 이 붙여져 있습니다.df1A ~ D 。A ~ D ~ D 。

df1 = pd.DataFrame(data_frame, columns=['Column A', 'Column B', 'Column C', 'Column D'])
df1

모든 필수 열이 표시됩니다!

일부 열을 제외하려면 해당 열을 열 인덱스에 놓을 수 있습니다.예를 들어 다음과 같습니다.

   A   B    C     D
0  1  10  100  1000
1  2  20  200  2000

2개를 제외한 모든 항목 선택:

df[df.columns.drop(['B', 'D'])]

출력:

   A    C
0  1  100
1  2  200

잘라내기 방법을 사용하여 중간 열을 선택할 수도 있습니다.

df.truncate(before='B', after='C', axis=1)

출력:

    B    C
0  10  100
1  20  200
def get_slize(dataframe, start_row, end_row, start_col, end_col):
    assert len(dataframe) > end_row and start_row >= 0
    assert len(dataframe.columns) > end_col and start_col >= 0
    list_of_indexes = list(dataframe.columns)[start_col:end_col]
    ans = dataframe.iloc[start_row:end_row][list_of_indexes]
    return ans

이 기능만 사용하세요.

이것이 당신의 목표에 도달하는 가장 쉬운 방법이라고 생각합니다.

import pandas as pd

cols = ['a', 'b']

df1 = pd.DataFrame(df, columns=cols)

df1 = df.iloc[:, 0:2]

언급URL : https://stackoverflow.com/questions/11285613/selecting-multiple-columns-in-a-pandas-dataframe

반응형