小编Gui*_*ume的帖子

SQLAlchemy ORM:多态单表继承,如果找不到"polymorphic_identity",则回退到父类

使用Python 3.5和SQLAlchemy 1.0.14(ORM).

我有一个声明如下的项目表:

from sqlalchemy.ext.declarative.api import declarative_base

Base = declarative_base()

class Item(Base):
    __tablename__ = 'items'

    id = Column(Integer, primary_key=True)
    type = Column(String)
    # other non relevant attributes
Run Code Online (Sandbox Code Playgroud)

我的项目可以有许多不同的类型,存储的类型标识符type.对于其中一些对象类型,我需要具有特定的方法或属性.

为了实现这一点,我尝试使用单个表继承与几个SpecialisedItem作为Item的子类:

class Item(Base):
    __tablename__ = 'items'

    id = Column(Integer, primary_key=True)
    type = Column(String, index=True)
    # other non relevant attributes

    __mapper_args__ = {
        'polymorphic_on': type,
    }

class SpecialisedItem(Base):
    __mapper_args__ = {
        'polymorphic_identity': 'specialitem',
    }

    def specialised_method(self):
        return "I am special"
Run Code Online (Sandbox Code Playgroud)

现在当我加载我的项目时,我希望所有特殊项目(有type=='specialitem')都这样加载,而任何其他类型的值将导致父类Item被加载.这不起作用,我AssertionError: No such polymorphic_identity 'normal' …

python sqlalchemy single-table-inheritance

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

python pandas:groupby中2个日期之间的差异

使用Python 3.6和Pandas 0.19.2:

我有一个DataFrame,包含用于事务的已解析日志文件.每一行都带有时间戳,包含一个transactionid,可以表示事务的开始或结束(因此每个transactionid有1行用于start,1行用于end).

每个终点线中还可以存在其他信息.

我想通过使用startdate减去结束日期来提取每个事务的持续时间,并保留其他信息.

样本输入:

import pandas as pd
import io
df = pd.read_csv(io.StringIO('''transactionid;event;datetime;info
1;START;2017-04-01 00:00:00;
1;END;2017-04-01 00:00:02;foo1
2;START;2017-04-01 00:00:02;
3;START;2017-04-01 00:00:02;
2;END;2017-04-01 00:00:03;foo2
4;START;2017-04-01 00:00:03;
3;END;2017-04-01 00:00:03;foo3
4;END;2017-04-01 00:00:04;foo4'''), sep=';', parse_dates=['datetime'])
Run Code Online (Sandbox Code Playgroud)

这给出了以下DataFrame:

   transactionid  event             datetime  info
0              1  START  2017-04-01 00:00:00   NaN
1              1    END  2017-04-01 00:00:02  foo1
2              2  START  2017-04-01 00:00:02   NaN
3              3  START  2017-04-01 00:00:02   NaN
4              2    END  2017-04-01 00:00:03  foo2
5              4  START  2017-04-01 00:00:03   NaN
6              3    END  2017-04-01 00:00:03 …
Run Code Online (Sandbox Code Playgroud)

python group-by aggregate pandas

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

无法在python中将字符串转换为float

我是Python的新手,请原谅我这个简单的问题.我正在尝试将字符串转换为浮点数.以下是数据示例:

0     10.65%
1      7.90%
Run Code Online (Sandbox Code Playgroud)

当我尝试:

 df['int_rate'] = df['int_rate'].astype('float')
Run Code Online (Sandbox Code Playgroud)

我明白了:

ValueError: could not convert string to float: '13.75%'
Run Code Online (Sandbox Code Playgroud)

当我尝试:

df['int_rate'] = df['int_rate'].replace("%","", inplace=True) 
Run Code Online (Sandbox Code Playgroud)

检查我的数据,我得到:

0     None
1     None
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?非常感谢!

python pandas

8
推荐指数
2
解决办法
3426
查看次数

Python Pytest:显示错误时的完整变量值(不最小化)

我在Python 3.6上使用pytest 3.9,但在pytest文档中找不到此问题的答案。

我有一些测试用例,其中涉及检查给定键是否在字典中。当该键不存在时,pytest显示失败,但是以某种方式“减少”字典值,仅显示其某些值。输出局部变量值时也会发生同样的事情(减少了字典和列表,以便仅显示某些值)。

有什么方法可以禁用“最小化值”,而是显示完整的变量值?

显示此行为的示例测试用例:

def test_in():
    d = {key: key for key in range(500)} # makes d sufficiently big to trigger minimization of output
    assert 1000 in d # this will fail
Run Code Online (Sandbox Code Playgroud)

显示:

================ FAILURES ===========
________________ test_in ___________

def test_in():
        d = {key: key for key in range(500)}
>       assert 1000 in d 
E       assert 1000 in {0: 0, 1: 1, 2: 2, 3: 3, ...}
Run Code Online (Sandbox Code Playgroud)

我想拥有的全部价值,d而不是那个缩写的价值。这将有助于我分析一些失败案例。

python pytest

5
推荐指数
2
解决办法
821
查看次数