使用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 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的新手,请原谅我这个简单的问题.我正在尝试将字符串转换为浮点数.以下是数据示例:
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 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而不是那个缩写的价值。这将有助于我分析一些失败案例。