Python Pandas-通过列表删除多列

时间:2020-02-01 05:57:27

标签: python pandas list

我尝试搜索此问题的答案,但找不到它...所以就去了。

我有一个包含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跟踪(最近一次通话最近) 在 ----> 1 df1 [ALTJ_genes]

getitem 中的

/opt/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py(自身,密钥) 第2984章984然大悟 2985键=列表(键) -> 2986索引器= self.loc._convert_to_indexer(键,轴= 1,raise_missing =真) 2987 2988#take()不接受布尔索引器

_convert_to_indexer中的

/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py(self,obj,axis,is_setter,raise_missing) 1283#设置时,即使使用.loc也不允许丢失键: 1284 kwargs = {“ raise_missing”:如果is_setter否则为true,则为true -> 1285返回self._get_listlike_indexer(obj,axis,** kwargs)1 1286其他: 1287试试:

_get_listlike_indexer中的

/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py(自身,键,轴,raise_missing) 1090 第1091章 -> 1092键,索引器,o._get_axis_number(axis),raise_missing = raise_missing 1093) 1094返回关键字,索引器

_validate_read_indexer中的

/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py(self,key,indexer,axis,raise_missing) 第1175章真相大白 1176“ [{key}]都不在[{axis}]中”。 -> 1177键=键,轴= self.obj._get_axis_name(轴) 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 个答案:

答案 0 :(得分:2)

我认为您需要删除[],因为ALTJ_genes是列表,而[ALTJ_genes]是嵌套列表:

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

但更简单的是按列表选择列:

df1 = df1[ALTJ_genes]

编辑:

我认为问题在于已定义的带有嵌套列表的列,因此请获得一级非标准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')