小编Mup*_*pet的帖子

使用pandas循环数据帧的最有效方法是什么?

我希望以顺序方式对数据框中的财务数据执行我自己的复杂操作.

例如,我使用从Yahoo Finance获取的以下MSFT CSV文件:

Date,Open,High,Low,Close,Volume,Adj Close
2011-10-19,27.37,27.47,27.01,27.13,42880000,27.13
2011-10-18,26.94,27.40,26.80,27.31,52487900,27.31
2011-10-17,27.11,27.42,26.85,26.98,39433400,26.98
2011-10-14,27.31,27.50,27.02,27.27,50947700,27.27

....
Run Code Online (Sandbox Code Playgroud)

然后我做以下事情:

#!/usr/bin/env python
from pandas import *

df = read_csv('table.csv')

for i, row in enumerate(df.values):
    date = df.index[i]
    open, high, low, close, adjclose = row
    #now perform analysis on open/close based on date, etc..
Run Code Online (Sandbox Code Playgroud)

这是最有效的方式吗?鉴于对熊猫速度的关注,我认为必须有一些特殊的函数来迭代遍历值,同时也检索索引(可能通过生成器来节省内存)?df.iteritems遗憾的是,只能逐列迭代.

python performance for-loop dataframe pandas

306
推荐指数
10
解决办法
41万
查看次数

如何将numpy.recarray转换为numpy.array?

将numpy转换recarray为普通数组的最佳方法是什么?

我可以做一个.tolist()然后再做array()一次,但这似乎有点低效..

例:

import numpy as np
a = np.recarray((2,), dtype=[('x', int), ('y', float), ('z', int)])

>>> a
  rec.array([(30408891, 9.2944097561804909e-296, 30261980),
   (44512448, 4.5273310988985789e-300, 29979040)], 
  dtype=[('x', '<i4'), ('y', '<f8'), ('z', '<i4')])

>>> np.array(a.tolist())
   array([[  3.04088910e+007,   9.29440976e-296,   3.02619800e+007],
   [  4.45124480e+007,   4.52733110e-300,   2.99790400e+007]])
Run Code Online (Sandbox Code Playgroud)

python numpy

14
推荐指数
1
解决办法
7465
查看次数

Enum vs String作为函数中的参数

我注意到现在很多库似乎更喜欢使用字符串而不是enum-type变量来获取参数.

人们之前会使用枚举,例如dateutil.rrule.FR为星期五,似乎这已经转向使用字符串(例如'FRI').

numpy(或pandas)也是如此,其中searchsorted例如使用字符串(例如side ='left'side ='right')而不是定义的枚举.为了避免疑问,在python 3.4之前,这可以很容易地实现为枚举:

class SIDE:
    RIGHT = 0
    LEFT = 1
Run Code Online (Sandbox Code Playgroud)

enums-type变量的优点很明显:你不能在不引发错误的情况下拼错它们,它们为IDE提供了适当的支持等.

那么为什么要使用字符串,而不是坚持使用枚举类型呢?这不会使程序更容易出现用户错误吗?它不像枚举产生开销 - 如果有的话,它们应该稍微更高效.那么这种范式转变的时间和原因何时发生?

python coding-style numpy

13
推荐指数
3
解决办法
4702
查看次数

Python变量命名约定

所以我试图切换到PEP8表示法(来自一个相当个人的CamelCase表示法),我想知道你们是如何解决现有函数/变量被覆盖的情况?

例如:

open, high, low, close, sum = row
Run Code Online (Sandbox Code Playgroud)

将会覆盖"开放"和"总和"功能.首先,如果我不使用一个好的IDE,我甚至不会注意到我刚刚覆盖了重要的基本功能.其次,你如何命名变量呢?在这个例子中,我会使用匈牙利语应用程序,根本不会遇到任何潜在的问题.

谢谢!

python pep8

9
推荐指数
3
解决办法
3436
查看次数

功能失败:引发异常,或返回FALSE?什么是更好的方法?

我想知道你们如何处理函数失败.您是否引发异常,或者是否返回错误消息?

eG我有一个应该连接到外部com对象的函数.如果尚未通过其他程序启动COM对象,则无法建立连接.通知主程序的首选python方式是什么?我应该使用详细的错误消息引发异常,还是应该简单地返回错误消息?

谢谢!

python pep8

8
推荐指数
2
解决办法
7183
查看次数

CherryPy重定向到root

快速问题:我使用CherryPy创建了一个Web服务器.它需要对所有页面进行身份验证,因此我的默认处理程序返回登录页面对象.由于CherryPy处理调度的方式,有人请求:

localhost:80/a/b/c
Run Code Online (Sandbox Code Playgroud)

将被重定向到:

localhost:80/a/b/login
Run Code Online (Sandbox Code Playgroud)

但是,我希望从根级别调用所有未经身份验证的请求,与HTML请求中添加的潜在附加参数无关,eG:

localhost:80/a/b/c --> localhost:80/login
Run Code Online (Sandbox Code Playgroud)

目前我通过返回基于HTML的重定向来解决这个问题:

'<meta http-equiv="REFRESH" content="0;url=/login">'
Run Code Online (Sandbox Code Playgroud)

我觉得这是一个非常不干净的解决方案,而宁愿使用基于CherryPy的解决方案.我查看了cherrypy.HTTPRedirect和cherrypy.url,但我还没有找到办法让它们解决这个问题.

有什么想法吗?

谢谢!

python redirect cherrypy

7
推荐指数
1
解决办法
8244
查看次数

为什么在函数参数中使用元组约定?

我想知道为什么许多函数 - 特别是在 numpy 中 - 使用元组作为函数参数?

例如:

a = numpy.ones( (10, 5) )
Run Code Online (Sandbox Code Playgroud)

那可能有什么用?为什么不简单地使用如下内容,因为显然第一个参数将始终表示数组的大小?

a = numpy.ones(10, 5)
Run Code Online (Sandbox Code Playgroud)

是因为可能有额外的参数,比如 dtype?即使是这样,

a = numpy.ones(10, 5, dtype=numpy.int)
Run Code Online (Sandbox Code Playgroud)

对我来说似乎比使用复杂的元组约定要干净得多。

感谢您的回复

python coding-style numpy

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

为什么带有dtype = object的numpy数组导致文件大小比dtype = int小得多?

这是一个例子:

import numpy as np
randoms = np.random.randint(0, 20, 10000000)

a = randoms.astype(np.int)
b = randoms.astype(np.object)

np.save('d:/dtype=int.npy', a)     #39 mb
np.save('d:/dtype=object.npy', b)  #19 mb! 
Run Code Online (Sandbox Code Playgroud)

您可以看到dtype = object的文件大小只有一半.怎么会?我的印象是,正确定义的numpy dtypes严格地优于对象dtypes.

python numpy

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

结合 Remote-SSH 扩展启动外部终端

在 VSCode 中使用Remote-SSH 扩展时,我无法启动真正的外部终端。连接客户端在 Windows 上运行,SSH 服务器基于适当的 linux (CentOS)。

我经历了各种 settings.json 调整,甚至用不同的演示文稿创建了各种自己的任务,但它们都没有产生真正的新的真正的外部启动终端。每次它只会在底部栏中添加另一个集成终端。

如何强制系统在连接到 SSH 服务器并执行我的脚本的单独窗口中启动新终端?

remote-debugging visual-studio-code

5
推荐指数
0
解决办法
218
查看次数

如何检测/避免更新缓存的基于 React 的应用程序?或者如何在缓存失效发生之前检测到它?

我正在 React 中开发一个应用程序,它在客户端进行加密并将加密的内容发送回服务器以进行安全存储(例如考虑在线钱包)。这很有效,因为数据是安全的,以防有人恶意访问数据。但是,如果黑客访问服务器并更改实际的 React 代码以将数据以原始格式而不是加密格式发回,这将破坏整个系统。

那么我怎样才能强制 React 应用程序只缓存一次,然后在未来的任何时候,在它拉出应用程序的新版本之前,它会警告用户“有新的更新可用,他们需要检查 Twitter和/或 GitHub 以确保有效性”?

基本上我需要在“缓存失效”尝试发生之前检测它们并警告用户。我怎么能这样做?

javascript security caching cache-invalidation reactjs

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

如何在C#中有效地摆脱双循环?

这是我目前用于打破双循环并继续DoStuff()的方法:

foreach (var enemyUnit in nearbyEnemyUnits) {
    var skip = false;
    foreach (var ownUnit in ownUnits) {
        if (ownUnit.EngagedTargetTag == enemyUnit.tag) {
            skip = true;
            break;
        }
    }

    if (skip) continue;

    DoStuff(enemyUnit);
}
Run Code Online (Sandbox Code Playgroud)

整个"定义一个临时的布尔变量以检查跳过"对我来说似乎非常hacky.在像Go这样的语言中,我可以使用标签来突破循环,甚至可以使内部循环成为clojure的一部分.在C#中执行此操作的最佳方法是什么?

我一直在做上面这个例子的时间最长,并觉得必须有一个更好的方法 - 在这一点上几乎感到羞愧.

谢谢

c# loops

4
推荐指数
1
解决办法
82
查看次数

object_store_memory 和 redis_max_memory 有何关系?

我认为我没有完全理解object_store_memory和redis_max_memory之间的关系。我最初以为redis db保存了内存中的所有对象,但是如何才能使对象存储大小大于redis_max_memory大小呢?或者它的某些部分已写入磁盘?RAM是如何消耗的?RAM_CONSUMED = object_store_memory + redis_max_memory,还是它的并集?

ray

4
推荐指数
1
解决办法
950
查看次数

变量赋值的最佳实践以及为什么?

我想知道你们认为分配变量值的最佳实践是什么。“懒惰”的情况:

signal = -1
if (date.month != nextDate.month):
    signal = +1
Run Code Online (Sandbox Code Playgroud)

或完全披露的案例:

if (date.month != nextDate.month):
    signal = +1
else:
    signal = -1
Run Code Online (Sandbox Code Playgroud)

这两种情况的优点/缺点是什么?

python

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