小编Pie*_*olo的帖子

熊猫中一列的每个元素的正方形

如何在pandas中对DataFrame的列/系列的每个元素进行平方(并创建另一列来保存结果)?

python pandas

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

python中的eval函数范围

请考虑以下示例:

i=7
j=8
k=10
def test():
    i=1
    j=2
    k=3
    return dict((name,eval(name)) for name in ['i','j','k'])
Run Code Online (Sandbox Code Playgroud)

它返回:

>>> test()
{'i': 7, 'k': 10, 'j': 8}
Run Code Online (Sandbox Code Playgroud)

为什么eval不考虑函数内定义的变量?从文档中,您可以选择传递全局变量和本地字典.这意味着什么?最后,我如何修改这个小案例才能使它工作?

python eval python-internals

20
推荐指数
1
解决办法
890
查看次数

如何在虚拟环境中安装SIP和PyQt?

我是新来的virtualenv.我想安装需要的spyder PyQt4,这需要SIP.

pip不起作用,所以我下载了SIP,我做了以下命令:

python configure.py
make
make install
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

make[1]: entrant dans le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/sipgen »
cp -f sip /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/bin/sip
make[1]: quittant le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/sipgen »
make[1]: entrant dans le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/siplib »
cp -f sip.so /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/lib/python2.7/site-packages/sip.so
strip /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/lib/python2.7/site-packages/sip.so
cp -f /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/siplib/sip.h /usr/local/python/include/python2.7/sip.h
cp: impossible de supprimer « /usr/local/python/include/python2.7/sip.h »: Permission non accordée
make[1]: *** [install] Erreur 1
make[1]: quittant le répertoire « /stck2/stck2.2/ptoniato/python/pip/virtualenv-1.10.1/provaenv/build/SIP/siplib »
make: *** [install] Erreur …
Run Code Online (Sandbox Code Playgroud)

python pyqt virtualenv

15
推荐指数
2
解决办法
2万
查看次数

map_async vs apply_async:在这种情况下我应该使用什么

我正在处理一些ascii-data,进行一些操作,然后将所有内容写回另一个文件(完成的工作post_processing_0.main,不返回任何内容).我想将代码与多处理模块并行化,请参阅以下代码片段:

from multiprocessing import Pool
import post_processing_0

def chunks(lst,n):
    return [ lst[i::n] for i in xrange(n) ]

def main():
    pool = Pool(processes=proc_num)
    P={}
    for i in range(0,proc_num):
        P['process_'+str(i)]=pool.apply_async(post_processing_0.main, [split_list[i]])
    pool.close()
    pool.join()


proc_num=8
timesteps=100
list_to_do=range(0,timesteps)
split_list=chunks(list_to_do,proc_num)

main()
Run Code Online (Sandbox Code Playgroud)

我读了地图和异步之间的区别,但我不太了解它.我的多处理模块的应用是否正确?

在这种情况下,我应该使用map_async还是apply_async?为什么?

编辑:

我不认为这是Python multiprocessing.Pool问题的重复:何时使用apply,apply_async或map?.在问题中,答案集中在使用这两个函数可以获得的结果的顺序.我在这里问:没有任何东西返回时有什么区别?

python multiprocessing

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

尽可能快地在python中导入大的tecplot块文件

我想在python中导入一些ascii文件(来自tecplot,用于cfd后期处理的软件).这些文件的规则是(至少,我需要导入的那些):

  • 该文件分为几个部分

每个部分都有两行作为标题:

VARIABLES = "x" "y" "z" "ro" "rovx" "rovy" "rovz" "roE" "M" "p" "Pi" "tsta" "tgen" 
ZONE T="Window(s) : E_W_Block0002_ALL",  I=29,  J=17,  K=25, F=BLOCK
Run Code Online (Sandbox Code Playgroud)
  • 每个部分都有一组由第一行给出的变量.当一个部分结束时,一个新部分以两条相似的行开头.
  • 对于每个变量,都有I*J*K值.
  • 每个变量都是一个连续的值块.
  • 每行有固定数量的值(6).
  • 变量结束时,下一个变量以新行开头.
  • 变量是"IJK有序数据".I指数变化最快; J指数下一个最快; K指数最慢.I-index应该是内部循环,K-index应该是外部循环,而J-index应该是循环之间的循环.

以下是数据示例:

VARIABLES = "x" "y" "z" "ro" "rovx" "rovy" "rovz" "roE" "M" "p" "Pi" "tsta" "tgen" 
ZONE T="Window(s) : E_W_Block0002_ALL",  I=29,  J=17,  K=25, F=BLOCK
-3.9999999E+00 -3.3327306E+00 -2.7760824E+00 -2.3117116E+00 -1.9243209E+00 -1.6011492E+00
[...]
0.0000000E+00 #fin first variable
-4.3532482E-02 -4.3584235E-02 -4.3627592E-02 -4.3663762E-02 -4.3693815E-02 -4.3718831E-02 #second variable, 'y'
[...]
1.0738781E-01 …
Run Code Online (Sandbox Code Playgroud)

python numpy python-2.7

9
推荐指数
1
解决办法
2211
查看次数

如何简化pathlib对象的使用以处理查找字符串的函数

我很喜欢使用pathlib在蟒蛇路径管理,但采用这种封装的缺点是很多的命令,像shutil.copy,.move,内建open需要一个字符串,而不是一个PosixPath对象,从而为错误

TypeError: coercing to Unicode: need string or buffer, PosixPath found
Run Code Online (Sandbox Code Playgroud)

逻辑解决方案当然是使用str().

我的问题是如何修改pathlib对象,以便调用open(pathlib.PosixPath)就可以在不使用的情况下工作str().

python python-2.7

9
推荐指数
2
解决办法
2538
查看次数

替代(更快)的战争到3嵌套的循环python

我怎样才能更快地完成这个功能?(我称之为很多时间,可能会提高速度)

def vectorr(I,  J,  K):
    vect = []
    for k in range(0,  K):
        for j in range(0, J):
            for i in range(0, I):
                vect.append([i, j, k])
    return vect
Run Code Online (Sandbox Code Playgroud)

python

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

如何使用__getattr__ pickable创建类

我如何修改下面的类以使它们可以成像?

这个问题:如何使一个具有__getattr__正确可选择的类?类似但在使用getattr时引用了错误的异常.

这个问题似乎提供了有意义的见解为什么pickle.dumps会调用__getattr__?,但它没有提供一个例子,我真的无法理解我想要实现的内容.

import pickle
class Foo(object):
    def __init__(self, dct):
        for key in dct:
            setattr(self, key, dct[key])


class Bar(object):
    def __init__(self, dct):
        for key in dct:
            setattr(self, key, dct[key])

    def __getattr__(self, attr):
        """If attr is not in channel, look in timing_data
        """
        return getattr(self.foo, attr)

if __name__=='__main__':
    dct={'a':1,'b':2,'c':3}
    foo=Foo(dct)
    dct2={'d':1,'e':2,'f':3,'foo':foo}
    bar=Bar(dct2)
    pickle.dump(bar,open('test.pkl','w'))
    bar=pickle.load(open('test.pkl','r'))
Run Code Online (Sandbox Code Playgroud)

结果:

     14         """If attr is not in channel, look in timing_data
     15         """
---> 16         return getattr(self.foo, attr)
     17
     18 if …
Run Code Online (Sandbox Code Playgroud)

python pickle getattr python-2.7

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

总结一下int overflow(?)python的列表

让我们考虑一个大整数列表,例如:

def primesfrom2to(n):
    # http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python/3035188#3035188
    """ Input n>=6, Returns a array of primes, 2 <= p < n """
    sieve = np.ones(n/3 + (n%6==2), dtype=np.bool)
    sieve[0] = False
    for i in xrange(int(n**0.5)/3+1):
        if sieve[i]:
            k=3*i+1|1
            sieve[      ((k*k)/3)      ::2*k] = False
            sieve[(k*k+4*k-2*k*(i&1))/3::2*k] = False
    return np.r_[2,3,((3*np.nonzero(sieve)[0]+1)|1)]

primesfrom2to(2000000)
Run Code Online (Sandbox Code Playgroud)

我想计算其总和,预期结果是142913828922.但如果我这样做:

sum(primesfrom2to(2000000))
Run Code Online (Sandbox Code Playgroud)

我得到1179908154,这显然是错的.问题是我有一个int溢出,但我不明白为什么.让我解释一下.考虑这个测试代码:

a=primesfrom2to(2000000)
b=[float(i) for i in a]
c=[long(i) for i in a]
sumI=0
sumF=0
sumL=0
m=0
for i,j,k in zip(a,b,c):
    m=m+1
    sumI=sumI+i
    sumF=sumF+j
    sumL=sumL+k
    print sumI,sumF,sumL
    if sumI<0:
        print i,m
        break
Run Code Online (Sandbox Code Playgroud)

我发现第一个整数溢出发生在[i …

python python-2.7

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