小编wes*_*yer的帖子

Pandas dropna - 商店掉线

我使用pandas.DataFrame.dropna方法删除包含NaN的行.此函数返回一个排除已删除行的数据框,如文档中所示.

如何将已删除的行的副本存储为单独的数据框?方法是:

mydataframe[pd.isnull(['list', 'of', 'columns'])]
Run Code Online (Sandbox Code Playgroud)

假设dropna被调用,总是保证返回dropna drop相同的行subset=['list', 'of', 'columns']

python python-3.x pandas

13
推荐指数
2
解决办法
5542
查看次数

如何检查在编译时是否调用了模板化方法?

我正在编写一个实体实体组件系统游戏引擎.作为其中的一部分,我编写了一个Manager类,它将注册各种IBase实现,稍后,允许我实例化这些实现.请参阅下面的示例,了解我希望如何使用它.

class Manager{
    public:
        template<class T>
        void registerDerived()
        { /*Register a Derived with the Manager*/ };

        template<class T>
        T createDerived()
        {   /*if T is not registered, throw an error*/
            return T();};
};

struct IBase{
};

struct Derived1 : public IBase{
};

struct Derived2 : public IBase{
};
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,我有一些代码,template<class T>Manager::createDerived()用于检查是否Base已使用注册的特定实现template<class T>Manager::registerDerived(),如果尚未注册,则会引发错误.这个检查是微不足道的,并且不在代码示例中以保持简单.

这是我的问题:是否可以将此检查移至编译时,而不是等到运行时?似乎在运行时应该有足够的信息来做出这个决定.

到目前为止,我已经探索/阅读了SFINAE,这似乎是采取的方法,但我无法弄清楚如何使这些习语在这种特定情况下起作用.这个链接很好地概述了基本的SFINAE习语,这个SO问题提供了一些很好的代码片段,最后这篇博文似乎几乎解决了我的确切情况.

以下是我尝试实现这些链接中的信息的完整示例:

#include <iostream>

class Manager{
    public:
        template<class T>
        void registerDerived() …
Run Code Online (Sandbox Code Playgroud)

c++ templates introspection template-meta-programming c++11

6
推荐指数
1
解决办法
240
查看次数

具有多个断言的Presenter-First Unittest

我正在尝试将Presenter-First方法用于新项目.我发现自己下面是unittest.我是否通过在此测试中包含如此多的断言来利用不良的单元测试实践?如果是,我的测试方法或presenter.setOverview的实现问题是什么?换句话说,setOverview方法应该调用self.setSalesQty而不是self.view.setSalesQty吗?在这种情况下,我将对presenter.setSalesQty进行单独测试,testSetOverview测试将不再需要担心测试它.

def testSetOverview(self):
    # set up mock objects
    p = PropertyMock()
    type(self.mock_model).descriptions = p
    self.mock_model.getData.side_effect = [5, 10]
    self.mock_model.getDescription.side_effect = 'Description'

    # get required variables
    end = dt.date.today()
    start = dt.date(year=end.year, month=1, day=1)
    pn = 'abcd'

    # call presenter method
    self.presenter.setOverview(pn)

    # test to make sure proper calls were made
    model_getData_calls = [call(pn=pn, start=start, end=end,
                       data=self.mock_model.SHIPPED_QUANTITY),
                   call(pn=pn, start=start, end=end,
                        data=self.mock_model.PRICE_PAID)]

    self.mock_model.getData.assert_has_calls(model_getData_calls, any_order=True)
    assert self.mock_model.getDescription.called

    self.mock_view.setSalesQty.assert_called_with(val=5)
    self.mock_view.setSalesDols.assert_called_with(val=10)
    self.mock_view.setDescription.assert_called_with(val='Description')
Run Code Online (Sandbox Code Playgroud)

python unit-testing presenter-first

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

在切片操作中避免循环

我有以下代码,我使用for循环执行.有没有办法在没有for循环的情况下完成相同的操作?

first_list <- c(1,2,3, rep(1,5), rep(2,5), rep(3,5), rep(4,5))
print(first_list)
[1] 1  2  3  1  1  1  1  1  2  2  2  2  2
[1] 3  3  3  3  3  4  4  4  4  4

breaks <- c(rep(1,3), rep(5,4))
values <- vector()
i <- 1
prev <- 1

for (n in breaks){
    values[i] <- sum(first_list[prev:sum(breaks[1:i])])
    i <- i + 1
    prev <- prev + n
}

print(values)
[1] 1   2   3   5   10   15   20
Run Code Online (Sandbox Code Playgroud)

循环的目的是获取列表的前三个元素,然后将接下来的四个5的总和添加到该列表中.

for-loop r conventions

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

为什么我能够取消引用抽象类的指针?

在下面的代码中,IContainer是一个纯抽象类:它不包含任何非纯虚方法。在这种情况下,我不希望能够实例化类型的对象IContainer,但是我确实希望能够在IContainer*.

main下面,我创建了一些SimpleContainer实现IContainer. SimpleContainer接下来,我在一些变量中存储了指向这些的指针IContainer*

这是我的问题:因为IContainer是一个抽象类,所以我无法实例化它。但是,在我的底部,main您可以看到我取消引用我的IContainer指针以检查相等性。为什么我能做到这一点?iCont1 == iCont2另外,和 之间有什么区别吗*iCont1 == *iCont2

#include <iostream>

class IContainer{
    public:
        virtual bool operator==(const IContainer& aICont) const = 0;
        virtual int getVal() const = 0;
};

class SimpleContainer : public IContainer{
    public:
        SimpleContainer(int val) : val(val){};
        int getVal() const override {return val;}
        bool operator==(const IContainer& aICont) const override
        {
            return val == …
Run Code Online (Sandbox Code Playgroud)

c++ abstract-class pointers

3
推荐指数
2
解决办法
1416
查看次数

从ggplot2中的图例中删除标签

我有下面的数据框,如图所示.如何将图例中显示的值限制为仅前三个?换句话说,我希望它只显示"A","B"和"C".

graph_table <- read.table(header=TRUE, text="
   names freq  rank percs sums sums_str
1      A 1208 'Top 3'  46.1 61.1    61.1%
2      B  289 'Top 3'  11.0 61.1    61.1%
3      C  105 'Top 3'   4.0 61.1    61.1%
4      D  388     D  14.8 14.8    14.8%
5      E  173     E   6.6  6.6     6.6%
6      F  102     F   3.9  3.9     3.9%
7      G   70     G   2.7  2.7     2.7%
8      H   54     H   2.1  2.1     2.1%
9      I   44     I   1.7  1.7     1.7%
10     J   32 …
Run Code Online (Sandbox Code Playgroud)

r legend ggplot2

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