我通过两列中的值过滤数据框中的行.
由于某种原因,OR运算符的行为与我期望AND运算符的行为相反,反之亦然.
我的测试代码:
import pandas as pd
df = pd.DataFrame({'a': range(5), 'b': range(5) })
# let's insert some -1 values
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1
df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print pd.concat([df, df1, df2], axis=1,
keys = [ 'original df', 'using AND (&)', 'using OR (|)',])
Run Code Online (Sandbox Code Playgroud)
结果如下:
original df using AND (&) using OR (|)
a b a b a …
Run Code Online (Sandbox Code Playgroud) 我正在使用类似于这个的异构容器.我可以轻松地从容器中放置和接收对象:
Favorites f = new Favorites();
f.putFavorite(String.class, "Java");
String someString = f.getFavorite(String.class);
Run Code Online (Sandbox Code Playgroud)
但似乎没有简单的方法来迭代这样的容器.我可以keySet()
在Favorites
类中添加一个方法,只需返回内部Map
对象的键集:
public Set<Class<?>> keySet() {
return favorites.keySet();
}
Run Code Online (Sandbox Code Playgroud)
现在,我想遍历键,使用键来获取关联的值,并在接收的对象上调用一些方法:
for (Class<?> klass : f.keySet()) {
// f.getFavorite(klass).<SOME_METHOD_SPECIFIC_TO_THE_CLASS-KEY>
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以通过调用来访问容器中保存的对象的方法klass.cast(f.getFavorite(klass)).SOME_METHOD()
,但它也不起作用(意思是,我不能访问任何方法,除了Object
相关的方法).
让我们说,在我的用例中,我想检查我迭代的所有这些对象的接口,并相应地对检测到的接口采取行动.我们还假设我可能有几十个不同类的对象,并且它们都实现了三个接口之一.
我能想到的唯一解决方案是用几十个isinstance
检查填充我的代码,但我更喜欢一种不那么麻烦的方法(即检查给定对象是否实现了三个接口之一).
我正在使用matplotlib绘制几十个子图.在图的底部,在最后一行图和图例之间,出现一个空白区域.当我添加更多的子图时,空白区域会变大.知道如何摆脱这个空旷的空间吗?
这是工作代码:
import textwrap
import matplotlib.pyplot as plt
from collections import OrderedDict
rlen = 31 # number of plots
figsize = (11, 3) # matrix of subplots
fig = plt.figure(figsize=(figsize[1]*4, figsize[0]*4))
plots = []
for f_ind in range(rlen):
plots.append(fig.add_subplot(figsize[0], figsize[1], f_ind))
fig.subplots_adjust(wspace=0.5, hspace=0.5)
for ax in plots:
atitle = 'Aaa bbb ccc ' * 10
ax.set_title('\n'.join(textwrap.wrap(atitle, 45)), fontsize=10)
ax.plot(range(10), range(10), 'o', color='red', label='LABEL_1')
revlist = list(reversed(range(10)))
ax.plot(revlist, range(10), 'o', color='blue', label='LABEL_2')
ax.set_xlabel('Train set size', fontsize=9)
ax.set_ylabel('Accuracy (%)', fontsize=9)
handles, labels …
Run Code Online (Sandbox Code Playgroud)