IT story

팬더에서 하나의 열을 제외하고 모든 열을 선택하는 방법은 무엇입니까?

hot-time 2020. 5. 11. 08:03
반응형

팬더에서 하나의 열을 제외하고 모든 열을 선택하는 방법은 무엇입니까?


다음과 같은 데이터 프레임이 있습니다.

import pandas
import numpy as np
df = DataFrame(np.random.rand(4,4), columns = list('abcd'))
df
      a         b         c         d
0  0.418762  0.042369  0.869203  0.972314
1  0.991058  0.510228  0.594784  0.534366
2  0.407472  0.259811  0.396664  0.894202
3  0.726168  0.139531  0.324932  0.906575

어떻게 제외하고 모든 열을 얻을 수 column b있습니까?


MultiIndex가없는 경우 df.columns열 이름의 배열 일뿐이므로 다음을 수행 할 수 있습니다.

df.loc[:, df.columns != 'b']

          a         c         d
0  0.561196  0.013768  0.772827
1  0.882641  0.615396  0.075381
2  0.368824  0.651378  0.397203
3  0.788730  0.568099  0.869127

를 사용하지 마십시오 ix. 그것은 것 되지 않습니다 . 가장 읽기 쉽고 관용적 인 방법은 다음과 df.drop()같습니다.

>>> df

          a         b         c         d
0  0.175127  0.191051  0.382122  0.869242
1  0.414376  0.300502  0.554819  0.497524
2  0.142878  0.406830  0.314240  0.093132
3  0.337368  0.851783  0.933441  0.949598

>>> df.drop('b', axis=1)

          a         c         d
0  0.175127  0.382122  0.869242
1  0.414376  0.554819  0.497524
2  0.142878  0.314240  0.093132
3  0.337368  0.933441  0.949598

기본적으로 .drop()제자리에서 작동하지 않습니다. 불길한 이름에도 불구 df하고이 과정은 무사합니다. 에서 영구적으로 제거하려면 b을 (를 df) 수행하십시오 df.drop('b', inplace=True).

df.drop()라벨 목록을 허용합니다 (예 : df.drop(['a', 'b'], axis=1)a및) b.


df[df.columns.difference(['b'])]

Out: 
          a         c         d
0  0.427809  0.459807  0.333869
1  0.678031  0.668346  0.645951
2  0.996573  0.673730  0.314911
3  0.786942  0.719665  0.330833

당신이 사용할 수있는 df.columns.isin()

df.loc[:, ~df.columns.isin(['b'])]

여러 열을 삭제하려면 다음과 같이 간단합니다.

df.loc[:, ~df.columns.isin(['col1', 'col2'])]

다른 방법은 다음과 같습니다.

df[[i for i in list(df.columns) if i != '<your column>']]

You just pass all columns to be shown except of the one you do not want.


Another slight modification to @Salvador Dali enables a list of columns to exclude:

df[[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]

or

df.loc[:,[i for i in list(df.columns) if i not in [list_of_columns_to_exclude]]]

I think the best way to do is the way mentioned by @Salvador Dali. Not that the others are wrong.

Because when you have a data set where you just want to select one column and put it into one variable and the rest of the columns into another for comparison or computational purposes. Then dropping the column of the data set might not help. Of course there are use cases for that as well.

x_cols = [x for x in data.columns if x != 'name of column to be excluded']

Then you can put those collection of columns in variable x_cols into another variable like x_cols1 for other computation.

ex: x_cols1 = data[x_cols]

Here is a one line lambda:

df[map(lambda x :x not in ['b'], list(df.columns))]

before:

import pandas
import numpy as np
df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd'))
df

       a           b           c           d
0   0.774951    0.079351    0.118437    0.735799
1   0.615547    0.203062    0.437672    0.912781
2   0.804140    0.708514    0.156943    0.104416
3   0.226051    0.641862    0.739839    0.434230

after:

df[map(lambda x :x not in ['b'], list(df.columns))]

        a          c          d
0   0.774951    0.118437    0.735799
1   0.615547    0.437672    0.912781
2   0.804140    0.156943    0.104416
3   0.226051    0.739839    0.434230

참고URL : https://stackoverflow.com/questions/29763620/how-to-select-all-columns-except-one-column-in-pandas

반응형