我的数据框有很多列,但对于某些人来说,它们的开头是与列名相似的单词:
>>> 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'之后的所有内容?”
答案 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]]