使用字符串列表按列标签切片Pandas DataFrame

时间:2015-04-08 19:37:19

标签: python pandas dataframe

我有两个文件。一个包含元数据/标签,另一个包含具有与元数据文件对应的标签的实际计数数据。 我浏览了元数据文件并使用Pandas切出了我想要的标签并将其导出到列表中。

如何获取标签列表并使用它来按列标签切片Pandas DataFrame?

我已经使用行标签做了类似的事情,但那是使用Pandas .isin()函数,它不能在列上使用。

编辑: 当我根据列表中是否找到行的名称切出行时,我使用类似于此的单行

row_list = ['row_name1', 'row_name2', row_name3']
sliced_rows = df[df['row_names'].isin(row_list)]

df = 
row_names   1   2   3   4
row_name1   0   2   0   6
row_name5   0   0   1   0
row_name2   0   0   0   0
row_name17  0   5   6   5

所以在这里我得到row_names1& rownames_2

我尝试做同样的事情,但是当row_names标记列而不是名称时。

所以矩阵看起来像这样。

label   column_name1    column_name2    column_name3    column_name4
1   0   2   0   6
2   0   0   1   0
3   0   0   0   0
4   0   5   6   5`

我根据列的名称是否在整个数据框的列表中按列进行选择。

1 个答案:

答案 0 :(得分:1)

实际上您可以使用isin

In [34]:

df = pd.DataFrame(np.random.randn(5, 4), columns=list('ABCD'))
df
Out[34]:
          A         B         C         D
0  0.540783  0.206722  0.627336  0.865066
1  0.204596  1.317936  0.624362 -0.573012
2  0.124457  1.052614 -0.152633 -0.021625
3  0.415278  1.469842  0.581196  0.143085
4  0.043743 -1.191018 -0.202574  0.479122
In [37]:

col_list=['A','D']
df[df.columns[df.columns.isin(col_list)]]
Out[37]:
          A         D
0  0.540783  0.865066
1  0.204596 -0.573012
2  0.124457 -0.021625
3  0.415278  0.143085
4  0.043743  0.479122

所以你可以做的就是调用isin并传递你的列表,这将产生一个布尔系列:

In [38]:

df.columns.isin(col_list)
Out[38]:
array([ True, False, False,  True], dtype=bool)

然后使用布尔掩码来掩盖列:

In [39]:

df.columns[df.columns.isin(col_list)]
Out[39]:
Index(['A', 'D'], dtype='object')

现在,您可以使用一系列列来使用

对df进行子集化