【问题标题】:Slicing Pandas DataFrame by column label using list of strings使用字符串列表按列标签对 Pandas DataFrame 进行切片
【发布时间】:2026-01-04 05:05:01
【问题描述】:

我有两个文件。一个包含元数据/标签,另一个包含具有与元数据文件对应的标签的实际计数数据。 我浏览了元数据文件并使用 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`

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

【问题讨论】:

  • 抱歉,您能否发布一个实际示例,您是否要求构建一个列列表,以便您可以从 df 中仅选择这些列?类似col_list = [col for col in df if col in other_col_list]?

标签: python pandas dataframe


【解决方案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 进行子集化

【讨论】:

  • 太好了,谢谢!我在某处读到它仅适用于行,甚至没有尝试就接受了。
最近更新 更多