我试图通过第一行过滤数据框,但似乎无法弄清楚如何做到这一点。
下面是我正在处理的数据的示例版本:
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的.str
StringAccessor方法来处理数据值而不是列名:
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方法的文档以获得更多帮助。