在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'后面的所有内容呢?
4 个回答
0
要获取你数据表中只有日期的那几列,可以这样做:
print df[[x for x in df.columns if "DAY" in x]]
0
是的,你可以试试这样做:
'DAYS' == x[:len('DAYS')]
这里你是在把目标字符串和前面 n 个字符进行比较。这里的 n 是你目标字符串的长度。
你可以在选择的时候使用这个条件。
1
pandas中的索引(和数据框)其实是numpy数组,所以你可以用numpy的一些索引技巧。特别是,用一个布尔值的向量来索引会很有帮助。要检查某个特定的条目是否以"DAYS"开头,可以使用Python的标准字符串方法;把这个放在列表推导式里,就能得到一个布尔值的列表:
df.columns[[x.startswith("DAYS") for x in df.columns]]
或者你可以在数组上使用map
方法,这样就可以避免出现双重括号:
df.columns(df.columns.map(lambda x: x.startswith("DAYS"))
3
试着把这个调整到你的代码里。
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()"方法,并用它来做一些逻辑判断。
如果你不喜欢列表推导式,这里有一个用for循环实现的等效写法:
days = []
for s in l[0]:
if s.startswith('DAYS'):
days.append(s)
print days