Python选择具有相似名称的列

2024-06-26 01:40:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框有许多列,但对于某些列,它们以类似于列名的单词开头:

>>> df.columns
Index([u'VESSELTYPE', u'VESSELNAME', u'PERIODSTART', u'PERIODEND', u'ESTREDELI', u'HIRE', u'DAYS Mar-14', u'DAYS Q2 2014', u'DAYS Q3 2014', u'DAYS Q4 2014', u'DAYS Q1 2015', u'DAYS Q2 2015', u'DAYS Q3 2015', u'DAYS Q4 2015', u'NUMDAYS'], dtype='object')
>>> 

看这里,我想选择前面有'DAYS'的所有,有没有像SQL中那样的东西,我可以用*来表示'DAYS'之后的所有东西?在


Tags: columns数据dfindex单词daysq3q2
3条回答

pandas索引(和数据帧)是numpy数组,因此您可以使用numpy的索引技巧——特别是,使用bools向量进行索引在这里非常有用。要测试任何特定的条目是否以“DAYS”开头,这是Python的标准字符串方法的问题;将其放在list comprehension中以获得bools列表:

df.columns[[x.startswith("DAYS") for x in df.columns]]

或者您可以对数组使用map方法来避免双括号:

^{pr2}$

试着让它适应你的代码。在

l = ([u'VESSELTYPE', u'VESSELNAME', u'PERIODSTART', u'PERIODEND', u'ESTREDELI', u'HIRE', u'DAYS Mar-14', u'DAYS Q2 2014', u'DAYS Q3 2014', u'DAYS Q4 2014', u'DAYS Q1 2015', u'DAYS Q2 2015', u'DAYS Q3 2015', u'DAYS Q4 2015', u'NUMDAYS'], 'AnotherItem')

days = [s for s in l[0] if s.startswith('DAYS')]
print days

您可以使用对所有字符串都可用的“startswith()”方法,并用它生成一些逻辑。在

如果您不喜欢list-comprehensions,下面是for循环中它的等效项:

^{pr2}$

是的,你可以试试这样的方法:

'DAYS' == x[:len('DAYS')]

在这里,您要将目标字符串与字符串第一个n字符进行比较。你的目标字符串的长度。在

您可以在选择中使用此条件。在

相关问题 更多 >