Python Pandas - Удаление нескольких столбцов через список - PullRequest
1 голос
/ 01 февраля 2020

Я пытался найти ответ на этот вопрос, но не смог его найти ... так что вот так.

У меня есть набор данных с 23987 столбцами. Я на самом деле хочу только информацию в 35 из этих столбцов (достаточно разбросаны по ним). Я поместил эти 35 пунктов в список. Я хотел знать, есть ли быстрый способ отбросить все столбцы, кроме тех, которые пропустили список

Я попробовал это:

df1.drop(df1.columns.difference([ALTJ_genes]), axis=1, inplace=True)

ALTJ_genes - список с 35 предметов. Я получаю ошибку:

TypeError: unhashable type: 'list'

Мне было интересно, есть ли способ сделать это, я знаю, что могу достичь своей цели, пропустив отдельные столбцы, но я хочу знать, возможно ли с помощью списка , Это сделало бы код намного понятнее.

В любом случае, спасибо!

РЕДАКТИРОВАТЬ: Я предоставляю некоторые скриншоты, может быть, это полезно.

The first screenshot shows the head of the dataframe The second screenshot shows how I can select one column

Теперь, это полная ошибка, которую я получаю при передаче списка со всеми генами.

---------------------------------------------------------------------------

KeyError Traceback (самая последняя последний вызов) в ----> 1 df1 [ALTJ_genes]

/ opt / anaconda3 / lib / python3 .7 / site-packages / pandas / core / frame.py в getitem (self, key) 2984, если is_iterator (key): 2985 key = list (key) -> индексатор 2986 = self.lo c ._ convert_to_indexer (ключ, axis = 1, повысить_missing = True) 2987 2988 # take ( ) не принимает логические индексаторы

/ opt / anaconda3 / lib / python3 .7 / site-packages / pandas / core / indexing.py в _convert_to_indexer (self, obj, axis, is_setter, Повышение_missing) 1283 # При установке, пропущенные ключи не допускаются, даже если .lo c: 1284 kwargs = {"Повышение_выпуска": Истинно, если is_setter else Raise_missing} -> 1285 вернуть self._get_listlike_indexer (obj, axis, ** kwargs) 1 1286 остальное: 1287 попробуйте:

/ opt / anaconda3 / lib / python3 .7 / site-packages / pandas / core / indexing.py в _get_listlike_indexer ( self, key, axis, Повышение_missing) 1090 1091 self._validate_read_indexer (-> 1092 keyarr, indexer, o._get_axis_number (axis), lift_missing = Повышение_missing 1093) 1094 return keyarr, indexer

/ opt / anaconda3 / lib /python3.7/site-packages/pandas/core/indexing.py в _validate_read_indexer (self, key, indexer, axis, повысить_missing) 1175 повышать KeyError (1176 "Ни один из [{key}] находится в [{axis] }] ". format (-> 1177 key = key, axis = self.obj._get_axis_name (axis) 1178) 1179)

KeyError:" Ни один из [Index ([('APEX1',), ( 'ASF1A',), ('CDKN2D',), ('CIB1',), ('DNA2',), \ n ('FAAP24',), ('FANCM',), ('GEN1',), ('HRAS',), ('LIG1',), \ n ('LIG3',), ('MEN1',), ('MRE11',), ('MSH3',), ('MSH6',) , \ n ('NUDT1',), ('MTOR',), ('NABP2',), ('NTHL1',), ('PALB2',), \ n ('PARP1',), ('PARP3 ',), (' POLA1 ',), (' POLM ',), (' POLQ ',), \ n (' PRPF19 ',), (' RAD51D ',), (' RBBP8 ',), (' RRM2' ,), ('RUVBL2',), \ n ('SOD1',), ('KAT5',), ('UNG',), ('WRN',), ('XRCC1',)], \ n dtype = 'object', name = 'Gene_Name')] находятся в [столбцах] "

1 Ответ

2 голосов
/ 01 февраля 2020

Я думаю, вам нужно удалить [], потому что ALTJ_genes - это список, а [ALTJ_genes] - это вложенный список:

df1.drop(df1.columns.difference(ALTJ_genes), axis=1, inplace=True)

Но проще выбрать столбцы по списку:

df1 = df1[ALTJ_genes]

EDIT:

Я думаю, что проблема с определенными столбцами с вложенным списком, поэтому получите один уровень нестандартного MultiIndex:

df1 = pd.DataFrame([[1,2,3,4]])
#nested list
df1.columns = [['APEX1', 'ASF1A', 'CDKN2D', 'AAA']]
print (df1) 
  APEX1 ASF1A CDKN2D AAA
0     1     2      3   4

print (df1.columns)
MultiIndex([( 'APEX1',),
            ( 'ASF1A',),
            ('CDKN2D',),
            (   'AAA',)],
           )

Если передать не вложенный список:

df1 = pd.DataFrame([[1,2,3,4]])
#not nested list
df1.columns = ['APEX1', 'ASF1A', 'CDKN2D', 'AAA']
print (df1) 
   APEX1  ASF1A  CDKN2D  AAA
0      1      2       3    4

print (df1.columns)
Index(['APEX1', 'ASF1A', 'CDKN2D', 'AAA'], dtype='object')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...