Python选择具有相似名称的列

时间:2014-03-18 08:07:12

标签: python dataframe win32com

我的数据框有很多列,但对于某些人来说,它们的开头是与列名相似的单词:

>>> 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'之后的所有内容?”

4 个答案:

答案 0 :(得分:2)

尝试将其改编为您的代码。

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循环中的等价物:

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

print days

答案 1 :(得分:1)

pandas索引(和数据帧)是numpy数组,所以你可以使用Numpy的索引技巧 - 特别是使用bool向量进行索引可以在这里有所帮助。测试任何特定条目是否以" DAYS"是Python的标准字符串方法的问题;把它放在列表理解中以获得你的bool列表:

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

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

df.columns(df.columns.map(lambda x: x.startswith("DAYS"))

答案 2 :(得分:0)

是的,您可以尝试这样的事情:

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

将目标字符串与字符串首先 n 字符进行比较的位置。是n目标字符串的长度。

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

答案 3 :(得分:0)

只获取数据框的days列:

print df[[x for x in df.columns if "DAY" in x]]