Pandas真的很棒,但我真的很惊讶从Pandas.DataFrame中检索值的效率低下.在下面的玩具示例中,即使DataFrame.iloc方法也比字典慢100多倍.
问题:这里的教训是,词典是更好的查找价值观的方法吗?是的,我知道这正是他们的目的.但我只是想知道是否有关于DataFrame查找性能的遗漏.
我意识到这个问题比"问"更"沉思",但我会接受一个提供洞察力或观点的答案.谢谢.
import timeit
setup = '''
import numpy, pandas
df = pandas.DataFrame(numpy.zeros(shape=[10, 10]))
dictionary = df.to_dict()
'''
f = ['value = dictionary[5][5]', 'value = df.loc[5, 5]', 'value = df.iloc[5, 5]']
for func in f:
print func
print min(timeit.Timer(func, setup).repeat(3, 100000))
Run Code Online (Sandbox Code Playgroud)
value =字典[5] [5]
0.130625009537
value = df.loc [5,5]
19.4681699276
value = df.iloc [5,5]
17.2575249672
我觉得有一种比这更好的方法:
import pandas as pd
df = pd.DataFrame(
[['A', 'X', 3], ['A', 'X', 5], ['A', 'Y', 7], ['A', 'Y', 1],
['B', 'X', 3], ['B', 'X', 1], ['B', 'X', 3], ['B', 'Y', 1],
['C', 'X', 7], ['C', 'Y', 4], ['C', 'Y', 1], ['C', 'Y', 6]],
columns=['c1', 'c2', 'v1'])
def callback(x):
x['seq'] = range(1, x.shape[0] + 1)
return x
df = df.groupby(['c1', 'c2']).apply(callback)
print df
Run Code Online (Sandbox Code Playgroud)
为达到这个:
c1 c2 v1 seq
0 A X 3 1
1 A X 5 2
2 A …Run Code Online (Sandbox Code Playgroud) caret通过caretSBF和caretFuncs提供嵌套特征选择的功能.
caretSBF:用于筛选选择
lmSBF
rfSBF
treebagSBF
ldaSBF
nbSBF
Run Code Online (Sandbox Code Playgroud)
caretFuncs:用于递归特征选择 - (我假设只是出于历史原因,caretFuncs不被称为caretRFE?)
lmFuncs
rfFuncs
treebagFuncs
ldaFuncs
nbFuncs
gamFuncs
lrFuncs
Run Code Online (Sandbox Code Playgroud)
为什么这个辅助函数列表比插入符号的完整模型列表更有限?例如,没有为glmnet的弹性网方法,kernlab的svm方法等定制的特征选择方法.
是因为:
感谢阅读并感谢插入点包维护者的出色工作.
这个问题是“在 Flask-SQLAlchemy 中过滤关系和分页”的简化,这里的答案也可能会产生一个解决方案。
假设我有一个简单的模型类 Design:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
class Design(db.Model):
__tablename__ = 'design'
id = db.Column(db.Integer, primary_key=True)
designname = db.Column(db.String(64))
Run Code Online (Sandbox Code Playgroud)
我可以得到一个 Flask-SQLAlchemy BaseQuery 对象,如下所示:
>>> Design.query
<flask_sqlalchemy.BaseQuery object at 0x7f0b29c63990>
Run Code Online (Sandbox Code Playgroud)
我可以如您所愿地取回数据:
>>> Design.query.all()
[<item1>, <item2>, <item3>]
Run Code Online (Sandbox Code Playgroud)
我也可以通过这种方式获取 BaseQuery 对象(我认为这对于更复杂的查询是必要的,例如,带有连接的查询):
>>> db.Query(Design)
<flask_sqlalchemy.BaseQuery object at 0x7f0b29c6fdd0>
Run Code Online (Sandbox Code Playgroud)
看起来它应该是相同的对象类型 - 实际上,生成的 SQL 是相同的:
>>> str(db.Query(Design)) == str(Design.query)
True
Run Code Online (Sandbox Code Playgroud)
然而,当我在这里尝试 all() 方法时,它不起作用:
>>> db.Query(Design).all()
Traceback (most recent call last):
File "<debugger>", …Run Code Online (Sandbox Code Playgroud)