我有一个Series包含布尔值的pandas 对象.如何获得包含NOT每个值的逻辑的系列?
例如,考虑一个系列包含:
True
True
True
False
Run Code Online (Sandbox Code Playgroud)
我想要的系列将包含:
False
False
False
True
Run Code Online (Sandbox Code Playgroud)
这似乎应该相当简单,但显然我错了我的mojo =(
应该是一个简单的问题,但我无法在任何地方找到答案.~python中的运算符被记录为按位反转运算符.精细.我注意到看似精神分裂的行为,即:
~True -> -2
~1 -> -2
~False -> -1
~0 -> -1
~numpy.array([True,False],dtype=int) -> array([-2,-1])
~numpy.array([True,False],dtype=bool) -> array([False,True])
Run Code Online (Sandbox Code Playgroud)
在前4个示例中,我可以看到python正在实现(如文档所述)~x = -(x+1),输入被视为int,即使它是布尔值.因此,对于标量布尔值,~不被视为逻辑否定.并非在使用int类型的布尔值定义的numpy数组上的行为相同.
~那么为什么在布尔数组上作为逻辑否定运算符工作(另请注意:~numpy.isfinite(numpy.inf) -> True?)?
我必须not()在标量上使用它是非常烦人的,但是not()无法否定数组.然后对于一个数组,我必须使用~,但~不会否定一个标量......
我想使用pylab绘制散点图,但是,我的一些数据是NaN这样的:
a = [1, 2, 3]
b = [1, 2, None]
Run Code Online (Sandbox Code Playgroud)
pylab.scatter(a,b) 不起作用.
有没有什么方法可以在不显示这些NaN价值的情况下绘制实际价值点?
我有一个坐标列表:
y,x
445.92,483.156
78.273,321.512
417.311,204.304
62.047,235.216
87.24,532.1
150.863,378.184
79.981,474.14
258.894,87.74
56.496,222.336
85.105,454.176
80.408,411.672
90.656,433.568
378.027,441.296
433.964,290.6
453.606,317.648
383.578,115.432
128.232,312.496
116.276,93.536
94.072,222.336
52.226,327.308
321.663,187.56
392.972,279.008
Run Code Online (Sandbox Code Playgroud)
我想使用matplotlib根据这些点绘制密度图(或热图).我正在使用pcolormesh和contourf.我的问题是pcolormesh没有相同的音高大小:

这是代码:
x, y = np.genfromtxt('pogba_t1314.csv', delimiter=',', unpack=True)
#print(x[1], y[1])
y = y[np.logical_not(np.isnan(y))]
x = x[np.logical_not(np.isnan(x))]
k = gaussian_kde(np.vstack([x, y]))
xi, yi = np.mgrid[x.min():x.max():x.size**0.5*1j,y.min():y.max():y.size**0.5*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))
fig = plt.figure(figsize=(9,10))
ax1 = fig.add_subplot(211)
ax1.pcolormesh(xi, yi, zi.reshape(xi.shape), alpha=0.5)
ax1.plot(y,x, "o")
ax1.set_xlim(0, 740)
ax1.set_ylim(515, 0)
#overlay soccer field
im = plt.imread('statszone_football_pitch.png')
ax1.imshow(im, extent=[0, 740, 0, 515], aspect='auto') …Run Code Online (Sandbox Code Playgroud) 与此问题类似,我想从2-D numpy数组中删除一些NAN.但是,我没有删除具有NAN的整行,而是想从数组的每一行中删除相应的元素.例如(为简单起见使用列表格式)
x=[ [1,2,3,4],
[2,4,nan,8],
[3,6,9,0] ]
Run Code Online (Sandbox Code Playgroud)
会成为
x=[ [1,2,4],
[2,4,8],
[3,6,0] ]
Run Code Online (Sandbox Code Playgroud)
我可以想象使用一个numpy.where来确定每一行中出现NAN的位置,然后使用一些循环和逻辑语句从旧数组中创建一个新数组(跳过NAN和其他行中的相应元素)但对我来说似乎不是一个非常简化的做事方式.还有其他想法吗?