【发布时间】:2014-10-17 09:02:00
【问题描述】:
我写了一个简单的函数,从空格分隔的字符串到变量名列表进行变量扩展——只是你老的 'var1 var2 var3'.split() 技巧加上一些简单的通配符扩展。 (实际功能在问题的底部。)
df = pd.DataFrame( { 'cat': [1,2,3], 'car': [7,8,9],
'dog': [8,8,8], 'pelican': [2,4,6] } )
In [90]: cols( df, 'ca* pelican')
Out[90]: ['car', 'cat', 'pelican']
到目前为止一切顺利,我可以这样使用它:
df[ cols( df, 'ca* pelican') ]
但函数调用中的“df”是多余的。我想知道我能做些什么来代替以下操作之一:
df[ cols('ca* pelican') ]
df.cols( 'ca* pelican' )
我知道后者对于开发人员来说是可能的,但我不认为它对于用户来说是可能的,而且我已经完成了接近零的方法编写,所以也许有办法?无论如何,这就是我是否可以实现上述两种语法之一的问题。这是实际的功能,如果重要的话(别笑,这只是一个简单的概念证明!):
def cols( df, clist):
clist = clist.split()
cols = []
for col in clist:
if col.endswith('*'):
for column in df.columns:
if column.startswith(col[:-1]):
cols.append(column)
else:
cols.append(col)
return cols
【问题讨论】:
-
为什么不使用pandas
.filter方法,如df.filter(regex='ca*')或df.filter(regex='ca*|pelican')? -
谢谢,我不知道如何使用过滤器/正则表达式。我会在该函数的更高版本中包含类似的内容。但是,这并不能回答核心问题,也不能解决诸如使代码更具可读性和允许其他变量扩展(例如 VAR1-3 包括 VAR2 但不包括 VAR4)之类的问题。