小编Owe*_*wen的帖子

Pandas DataFrame性能

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

python dictionary pandas

62
推荐指数
3
解决办法
4万
查看次数

如何使用Pandas groupby在组上添加顺序计数器列

我觉得有一种比这更好的方法:

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)

python pandas

32
推荐指数
1
解决办法
1万
查看次数

插入符号的辅助功能:caretSBF和caretFuncts

caret通过caretSBFcaretFuncs提供嵌套特征选择的功能.

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方法等定制的特征选择方法.

是因为:

  • 这些其他模型与通用案例函数(即caretSBF和caretFuncs)一起工作正常吗? - 虽然我遇到麻烦试图让glmnet与caretSBF一起工作......
  • 这些其他型号在功能选择方面不需要"额外帮助"? - 我想像弹性网这样的方法被认为可以很好地进行特征选择,但是像SVM这样的其他方法当然不会......
  • 包维护者还没有为其他方法编写专用函数? - 在哪种情况下,社区可以/应该提供这些辅助功能吗?

感谢阅读并感谢插入点包维护者的出色工作.

r r-caret

5
推荐指数
1
解决办法
1353
查看次数

创建flask-SQLAlchemy BaseQuery 对象的两种方法-只有一种有效,为什么?

这个问题是“在 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)

python sqlalchemy flask flask-sqlalchemy

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×3

pandas ×2

dictionary ×1

flask ×1

flask-sqlalchemy ×1

r ×1

r-caret ×1

sqlalchemy ×1