如何筛选第一行(不是标题)以string开头的列



我试图通过第一行过滤数据框,但似乎无法弄清楚如何做到这一点。

下面是我正在处理的数据的示例版本:

In [11]: df = pd.DataFrame(
...:     [['Open-Ended Response', 'Open-Ended Response', 'Response', 'Response'], [1, 2, 3, 4]],
...:     columns=list('ABCD'),
...: )
In [12]: df
Out[12]:
A                    B         C         D
0  Open-Ended Response  Open-Ended Response  Response  Response
1                    1                    2         3         4

我想做的是过滤所有以"Response"开头的列在第一个非标题行中。在本例中,最后两列属于自己的数据框架

我可以很容易地过滤标题,像这样:

respo = [col for col in df if col.startswith('Response')]

但它似乎不工作,如果它是第1非标题行。重要的是,我需要在过滤后保留当前标题。

谢谢。

第一步是选择的第一行:

df.iloc[0]  # selects the values in the first row
然后,使用python的.strStringAccessor方法来处理数据值而不是列名:
df.iloc[0].str.startswith('Response') # Test the result of the above line

这将为您提供一个具有按列名索引的True/False值的Series。最后,根据匹配的标签从数据框架中选择:

df.loc[:, df.iloc[0].str.startswith('Response')] # Select columns based on the test

这应该能成功!

请参阅pandas关于索引和选择数据以及StringAccessor方法的文档以获得更多帮助。

最新更新