我有一个包含数值和 NaN 的表。求和时,如果所选值包含 NaN,则结果将为 NaN。有没有办法让postgresql在求和时将它们视为0而不是NaN?或者我只需将表中的所有 NaN 转换为 0 或 Null?
我在其中创建了自定义异常 errors.py
mapper = {
'E101':
'There is no data at all for these constraints',
'E102':
'There is no data for these constraints in this market, try changing market',
'E103':
'There is no data for these constraints during these dates, try changing dates',
}
class DataException(Exception):
def __init__(self, code):
super().__init__()
self.msg = mapper[code]
def __str__(self):
return self.msg
Run Code Online (Sandbox Code Playgroud)
DataException如果数据pandas帧中没有足够的数据,代码中其他地方的另一个函数会引发不同的实例.我想用unittest它来确保它返回相应的异常及其相应的消息.
使用一个简单的例子,为什么这不起作用:
from .. import DataException
def foobar():
raise DataException('E101')
import unittest
with unittest.TestCase.assertRaises(DataException):
foobar()
Run Code Online (Sandbox Code Playgroud)
正如这里建议的那样:Python assertRaises用户定义的异常 …
我需要将数据帧从后端发送到前端,因此首先需要将其转换为 JSON 可序列化的对象或直接转换为 JSON。问题是我有一些没有唯一列的数据框。我已经研究了orient参数、to_json()方法to_dict(),from_dict()但仍然无法让它工作......
目标是能够将 df 转换为可序列化的 json,然后返回到其初始状态。
我也很难使用 pd.read_clipboard 复制粘贴它,因此我包含了一个导致问题的示例 df 作为图像(抱歉!)。
我知道这看起来像是docker-compose 与多个数据库的重复,但在通过答案后我仍然无法让它工作。
这是我的docker-compose.yml:
version: '3'
services:
backend:
image: backend:1.0
build: ./backend
ports:
- "9090:9090"
depends_on:
- db
- ppt
environment:
- DATABASE_HOST=db
db:
image: main_db:26.03.18
restart: always
build: ./db
ports:
- "5432:5432"
ppt:
image: ppt_generator:1.0
build: ./ppt
ports:
- "6060:6060"
login:
image: login:1.0
build: ./login
ports:
- "7070:7070"
depends_on:
- login_db
login_db:
image: login_db:27.04.2018
restart: always
build: ./login_db
ports:
- "5433:5433"
Run Code Online (Sandbox Code Playgroud)
请注意,我在端口 5433 上有一个数据库,另一个在 5432 上。但是,当我docker ps在启动容器后运行时,我得到以下信息。我不完全了解端口发生了什么。
CONTAINER ID IMAGE COMMAND CREATED STATUS …Run Code Online (Sandbox Code Playgroud) 我在应用程序周围的各个位置使用了dotdict来增强代码的可读性。我几乎不知道这会在以后引起很多问题。一个特别烦人的情况是它似乎与副本库不兼容。
这就是我的意思
class DotDict(dict):
"""dot.notation access to dictionary attributes"""
__getattr__ = dict.get
__setattr__ = dict.__setitem__
__delattr__ = dict.__delitem__
Run Code Online (Sandbox Code Playgroud)
即这样访问字典属性的方法: dictionary.attribute
当我尝试
nested_dico = DotDict({'example':{'nested':'dico'}})
copy.deepcopy(nested_dico)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/copy.py in deepcopy(x, memo, _nil)
167 reductor = getattr(x, "__reduce_ex__", None)
168 if reductor:
--> 169 rv = reductor(4)
170 else:
171 reductor = getattr(x, "__reduce__", None)
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)
我认为这是因为它无法识别我的类DotDict,因此将其视为NoneType。
有谁知道解决这个问题的方法吗?也许重写副本库的有效类型?
我有两个 python 应用程序使用 web.py 在不同的端口上运行。我正在尝试将 30,000-40,000 个字符范围内的 JSON 字符串从一个应用程序发送到另一个应用程序。JSON 包含生成 powerpoint 报告所需的所有信息。我尝试使用以下请求启用此通信:
import requests
template = <long JSON string>
url = 'http://0.0.0.0:6060/api/getPpt?template={}'.format(template)
resp= requests.get(url).text
Run Code Online (Sandbox Code Playgroud)
我注意到在接收端,json 已被截断为 803 个字符长,因此当它解码 JSON 时,我得到:
json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 780 (char 779)
Run Code Online (Sandbox Code Playgroud)
我认为这必须限制 URL 请求的长度,来自 web.py 或请求,或者这是标准化的事情。有没有办法解决这个问题,或者我需要找到另一种方式来启用这两个 python 应用程序之间的通信。如果无法通过 http 发送这么长的 JSON,请您提出替代方案。谢谢!
python ×5
python-3.x ×4
postgresql ×2
assertraises ×1
copy ×1
dataframe ×1
deep-copy ×1
docker ×1
dockerfile ×1
json ×1
nan ×1
null ×1
pandas ×1
sum ×1
to-json ×1
unit-testing ×1
web.py ×1