拿这个代码:
import itertools as it
import numpy as np
data = ['a','b','c','d']
dw = np.array([1, 3], dtype=np.int64)
print(list(it.islice(data,dw[0],dw[1],1)))
Run Code Online (Sandbox Code Playgroud)
在Python 2.7上,它['b', 'c',]
按预期打印.
在Python 3.6上它抛出一个异常:
ValueError: Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.
Run Code Online (Sandbox Code Playgroud)
同样的np.int32
方法,并且itertools
包的其他方法抛出类似的错误,例如当你使用permutations
时得到TypeError: Expected int as r
.
除了这个numpy问题和相关问题之外,我找不到太多关于此 问题,但是那个问题在3年前被关闭,暗示它已经解决了.
基本的东西,比如使用numpy int进行索引data[dw[0]]
或布尔比较dw[0] == 1
就好了.
我错过了什么吗?这可能是Python 3的错误吗?
我有一个数据框,提供两个整数列,其中包含年份的一年和一周:
import pandas as pd
import numpy as np
L1 = [43,44,51,2,5,12]
L2 = [2016,2016,2016,2017,2017,2017]
df = pd.DataFrame({"Week":L1,"Year":L2})
df
Out[72]:
Week Year
0 43 2016
1 44 2016
2 51 2016
3 2 2017
4 5 2017
5 12 2017
Run Code Online (Sandbox Code Playgroud)
我需要从这两个数字创建一个datetime-object.
我试过这个,但它抛出一个错误:
df["DT"] = df.apply(lambda x: np.datetime64(x.Year,'Y') + np.timedelta64(x.Week,'W'),axis=1)
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这个,它可以工作,但给出了错误的结果,就是它完全忽略了一周:
df["S"] = df.Week.astype(str)+'-'+df.Year.astype(str)
df["DT"] = df["S"].apply(lambda x: pd.to_datetime(x,format='%W-%Y'))
df
Out[74]:
Week Year S DT
0 43 2016 43-2016 2016-01-01
1 44 2016 44-2016 2016-01-01
2 51 2016 51-2016 2016-01-01
3 …
Run Code Online (Sandbox Code Playgroud) 假设在我计算列该只大熊猫例如C
乘以A
与B
和float
使用,如果一定条件满足apply
一个lambda
功能:
import pandas as pd
df = pd.DataFrame({'A':[1,2,3,4,5,6,7,8,9],'B':[9,8,7,6,5,4,3,2,1]})
df['C'] = df.apply(lambda x: x.A if x.B > 5 else 0.1*x.A*x.B, axis=1)
Run Code Online (Sandbox Code Playgroud)
预期结果将是:
A B C
0 1 9 1.0
1 2 8 2.0
2 3 7 3.0
3 4 6 4.0
4 5 5 2.5
5 6 4 2.4
6 7 3 2.1
7 8 2 1.6
8 9 1 0.9
Run Code Online (Sandbox Code Playgroud)
问题是这段代码很慢,我需要在大约5600万行的数据帧上执行此操作.
%timeit
上述lambda操作的结果是:
1000 loops, best of 3: …
Run Code Online (Sandbox Code Playgroud) 我使用conda安装了plot.ly并试图在Jupyterlab的离线模式下使用它:
from plotly.offline import init_notebook_mode
init_notebook_mode(connected=True)
Run Code Online (Sandbox Code Playgroud)
Firefox开发人员控制台在这些语句后显示以下错误:
ReferenceError: requirejs is not defined
Run Code Online (Sandbox Code Playgroud)
我试图require.js
用笔记本手动放入文件夹并进入...\anaconda3\pkgs\jupyter\nbextensions
,它无法正常工作.
我该如何解决这个问题?如何正确安装require.js?
版本:
我想在Windows 10上的Anaconda 2安装中使用pip 为python安装镶木地板.
安装时遇到了此处描述的错误,安装程序找不到snappy-c.h
.
没有提到如何在答案中在Windows上安装它.
我从http://google.github.io/snappy/下载了Snappy库,现在我被卡住了.
从我的错误消息我会假设头文件需要进入C:\Users\...\AppData\Local\Continuum\Anaconda2\include
,但在下层归档文件头和库文件只是在同一个文件夹中.
如何在Anaconda文件夹中正确安装这些?
完整的错误消息:
Building wheels for collected packages: python-snappy
Running setup.py bdist_wheel for python-snappy ... error
Complete output from command C:\Users\...\AppData\Local\Continuum\Anaconda2\python.exe -u -c "import setup
tools, tokenize;__file__='c:\\users\\...\\appdata\\local\\temp\\pip-build-kl4zef\\python-snappy\\setup.py';f=ge
tattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec
'))" bdist_wheel -d c:\users\...\appdata\local\temp\tmpt8fz9bpip-wheel- --python-tag cp27:
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win-amd64-2.7
copying snappy.py -> build\lib.win-amd64-2.7
running build_ext
building '_snappy' extension
creating build\temp.win-amd64-2.7
creating build\temp.win-amd64-2.7\Release …
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,我想只更改另一列满足某个条件的列的值.我正试图这样做iloc
,它要么不起作用,要么我得到那个恼人的警告:
尝试在DataFrame的切片副本上设置值
例:
import pandas as pd
DF = pd.DataFrame({'A':[1,1,2,1,2,2,1,2,1],'B':['a','a','b','c','x','t','i','x','b']})
Run Code Online (Sandbox Code Playgroud)
做其中一个
DF['B'].iloc[:][DF['A'] == 1] = 'X'
DF.iloc[:]['B'][DF['A'] == 1] = 'Y'
Run Code Online (Sandbox Code Playgroud)
工作,但导致上面的警告.
这个也发出警告,但不起作用:
DF.iloc[:][DF['A'] == 1]['B'] = 'Z'
Run Code Online (Sandbox Code Playgroud)
我真的很困惑如何使用loc
,iloc
和ix
右边做布尔索引,也就是说,如何以正确的顺序和正确的语法提供行索引,列索引和布尔索引.
有人可以为我清除这个吗?
我使用itertools.combinations()
如下:
import itertools
import numpy as np
L = [1,2,3,4,5]
N = 3
output = np.array([a for a in itertools.combinations(L,N)]).T
Run Code Online (Sandbox Code Playgroud)
这产生了我需要的输出:
array([[1, 1, 1, 1, 1, 1, 2, 2, 2, 3],
[2, 2, 2, 3, 3, 4, 3, 3, 4, 4],
[3, 4, 5, 4, 5, 5, 4, 5, 5, 5]])
Run Code Online (Sandbox Code Playgroud)
我在多处理环境中反复使用这个表达式,我需要它尽可能快.
从这篇文章中我了解到,itertools
基于代码的代码并不是最快的解决方案,并且使用numpy
可能是一种改进,但是我numpy
对于理解和调整在那里编写的迭代代码或者提出我自己的优化的优化技巧还不够好..
任何帮助将不胜感激.
编辑:
L
来自熊猫数据帧,所以它也可以看作是一个numpy数组:
L = df.L.values
Run Code Online (Sandbox Code Playgroud) 在官方论坛上阅读此帖子后,我仍然不知道如何在没有聚合的情况下绘制列,并且该帖子没有提供任何可行的解决方案。
MS Power BI Desktop 中是否有一种方法可以简单地绘制一个或多个列而不进行任何聚合?
想象一下,我只有一个从 csv 导入的简单表格,其中有两列数值,我想在散点图中绘制这些单独的值,这是最基本的任务之一,并且可以在 Excel 等中轻松完成。
这在 Power BI Desktop 中不可能吗?
我正在使用C++和SDL2在Windows 7下使用Code :: Blocks 12.11开发一个小游戏.我正在使用mingw32-gcc编译器并下载SDL2的标准预编译Windows发行版(现在是2.0.1)并使用i686 -w64-mingw32版本.到目前为止,东西正在工作,我正在获得图形输出,SDL_ttf扩展也可以工作.
从一开始就没有用过的唯一一件事是将我的stdout按照预期从SDL的txt文件中获取:
无论我做什么,我都不会在任何地方获得stdout.txt或stderr.txt,甚至没有看到创建过的文件.
这些文件也不是在运行时创建的,在程序关闭时也会被删除,它们根本就不会被创建.
当我将程序编译为控制台应用程序时,我在该控制台中得到SDL错误输出,但根本没有cout或printf或fprintf(stdout ...)(尝试全部三个).
在没有SDL的情况下编程时,控制台标准输出可以正常工作.
所以问题不是将stdout重新路由到控制台,这是关于SDL和stdout的常见问题,问题是我甚至没有按照预期将输出写入相应的文件.
SDL 2.0.0和SDL 2.0.1都会发生这种情况,包括预编译和未编译.
这是我的主要功能的样子.myGame.GameStart()运行一切,包括清理.我对C++很新,所以这里也可能有一些奇怪的错误.
#include "SDL.h"
#include "SDL_ttf.h"
int main(int argc, char* argv[]) {
TTF_Init();
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_TIMER|SDL_INIT_EVENTS);
SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
MyGameClass myGame;
myGame.GameStart();
SDL_Quit();
TTF_Quit();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用-g和-std = c ++ 0x进行编译.
我正在链接mingw32,SDL2main,SDL2,SDL2_ttf(按此顺序)和mwindows.
要查看控制台,我将其编译为控制台应用程序,并在执行结束时使用"暂停"选项.
我是Code :: Blocks的新手,我没有深入研究编译器和调试器的各种选项.
有人有想法吗?我是以错误的顺序链接的吗?链接错误的东西?我的主要功能是错的吗?
我正在使用位于我公司大型机中的虚拟机.
我分配了4个核心,所以我正在尝试并行处理我的Python代码.我还不熟悉它,我遇到了意想不到的行为,即多处理/线程比单个处理需要更长的时间.我不知道我做错了什么,或者问题来自我的虚拟机.
这是一个例子:
import multiprocessing as mg
import threading
import math
import random
import time
NUM = 4
def benchmark():
for i in range(1000000):
math.exp(random.random())
threads = []
random.seed()
print "Linear Processing:"
time0 = time.time()
for i in range(NUM):
benchmark()
print time.time()-time0
print "Threading:"
for P in range(NUM):
threads.append(threading.Thread(target=benchmark))
time0 = time.time()
for t in threads:
t.start()
for t in threads:
t.join()
print time.time()-time0
threads = []
print "Multiprocessing:"
for i in range(NUM):
threads.append(mg.Process(target=benchmark))
time0 = time.time()
for t in …
Run Code Online (Sandbox Code Playgroud) python multithreading multiprocessing python-multithreading python-multiprocessing
我在数据帧上做了一些更复杂的操作,我比较了可以在帧中任何位置的两行.
这是一个例子:
import pandas as pd
import numpy as np
D = {'A':['a','a','c','e','e','b','b'],'B':['c','f','a','b','d','a','e']\
,'AW':[1,2,3,4,5,6,7],'BW':[10,20,30,40,50,60,70]}
P = pd.DataFrame(D)
P = P.sort_values(['A','B'])
P['AB'] = P.A+'_'+P.B
P['AWBW'] = P.AW+P.BW
Run Code Online (Sandbox Code Playgroud)
现在我在做什么在这里,我在字符串的配对A
和B
,例如a_c
我打电话AB
.我也有反向配对c_a
.我总结了数字AW
和BW
每个配对,称为AWBW
.
现在我想从值中减去求和值,a_c
并对c_a
存在两个变量的每个字符串配对执行相同的操作.所有其他值应该是NaN
,所以我的结果应如下所示:
A AW B BW AB AWBW RowDelta
0 a 1 c 10 a_c 11 -22.0
1 a 2 f 20 a_f 22 NaN
5 b 6 a 60 b_a 66 …
Run Code Online (Sandbox Code Playgroud) 假设我有一个1d数组,我想要的是用移动窗口进行采样,并在窗口内将每个元素除以第一个元素.
例如,如果我有[2, 5, 8, 9, 6]
一个窗口大小为3,结果将是
[[1, 2.5, 4],
[1, 1.6, 1.8],
[1, 1.125, 0.75]].
Run Code Online (Sandbox Code Playgroud)
我现在正在做的基本上是for循环
import numpy as np
arr = np.array([2., 5., 8., 9., 6.])
window_size = 3
for i in range(len(arr) - window_size + 1):
result.append(arr[i : i + window_size] / arr[i])
Run Code Online (Sandbox Code Playgroud)
等等
当阵列很大时它很慢,我想知道是否有更好的方法?我想O(n ^ 2)复杂性没有办法,但也许numpy有一些我不知道的优化.
python ×10
numpy ×5
pandas ×5
python-2.7 ×4
anaconda ×1
apply ×1
c++ ×1
datetime ×1
indexing ×1
install ×1
jupyter-lab ×1
optimization ×1
output ×1
performance ×1
plotly ×1
powerbi ×1
python-3.x ×1
requirejs ×1
sdl ×1
snappy ×1
stdout ×1
windows ×1