这与另一个问题非常相关.唯一的区别是我是动态添加Ellipse with self.canvas
而不是使用Builder(Builder.load_string
或Builder.load_file
).因此,这里的代码,做工作.当您单击椭圆时,它会移动并更改颜色:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty
from kivy.graphics import Color, Ellipse
Builder.load_string("""
<CircleWidget>:
canvas:
Color:
rgba: self.r,1,1,1
Ellipse:
pos: self.pos
size: self.size
""")
class CircleWidget(Widget):
r = NumericProperty(0)
def __init__(s, **kwargs):
s.size= [50,50]
s.pos = [100,50]
super(CircleWidget, s).__init__(**kwargs)
def on_touch_down(s, touch):
if s.collide_point(touch.x,touch.y):
s.pos = [s.pos[1],s.pos[0]] # this works
s.r = 1.0 # this also works
class TestApp(App): …
Run Code Online (Sandbox Code Playgroud) 我想使用类似difflib.get_close_matches
但不是最相似的字符串,我想获取索引(即列表中的位置)。
列表的索引更加灵活,因为可以将索引与其他数据结构(与匹配的字符串相关)相关联。
例如,而不是:
>>> words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']
>>> difflib.get_close_matches('Hello', words)
['hello', 'hallo', 'Hallo']
Run Code Online (Sandbox Code Playgroud)
我想:
>>> difflib.get_close_matches('Hello', words)
[0, 1, 6]
Run Code Online (Sandbox Code Playgroud)
似乎不存在获取此结果的参数,是否有替代方法可以difflib.get_close_matches()
返回索引?
我知道我可以使用difflib.SequenceMatcher
, 然后将字符串与ratio
(或quick_ratio
)进行一对一比较。但是,我担心这会非常低效,因为:
我将不得不创建数千个 SequenceMatcher 对象并比较它们(我希望get_close_matches
避免使用该类):
编辑:错误。我检查了 的源代码get_close_matches
,它实际上使用SequenceMatcher
.
没有截止(我猜有一种优化可以避免计算所有字符串的比率)
编辑:部分错误。该代码是get_close_matches
没有任何重大的优化,除了它使用real_quick_ratio
,quick_ratio
而ratio
产品总数。无论如何,我可以轻松地将优化复制到我自己的函数中。我也没有考虑到 SequenceMatcher 有设置序列的方法:set_seq1
, set_seq2
,所以至少我不必每次都创建一个对象。
据我了解,所有 python 库都是 C 编译的,这会提高性能。 …
PostgreSQL 10引入了带子句的声明性表分区PARTITION BY
,我想将它用于Django模型.
原则上我需要做的就是在Django ORM创建PARTITION BY
的CREATE TABLE
语句末尾引入该子句.
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
) PARTITION BY RANGE (logdate);
Run Code Online (Sandbox Code Playgroud)
是否可以将此子句插入模型中?我想也许有办法以某种方式将自定义SQL附加到ORM生成的查询中,例如使用Meta:
class Measurement(models.Model):
...
class Meta:
append = "PARTITION BY RANGE (logdate)"
Run Code Online (Sandbox Code Playgroud)
就我而言,上述情况是不可能的.我也查看了架构库,但它没有使用新的PARTITION BY子句.相反,它使用继承和触发器,因此代码不会建议我可以附加该子句的任何方式(它也不会用于其他数据库,例如MySQL).
我也通过添加ALTER TABLE...
操作来定制迁移,例如:
operations = [
migrations.RunSQL(
"ALTER TABLE measurement PARTITION BY RANGE (logdate)",
),
]
Run Code Online (Sandbox Code Playgroud)
不幸的是,PostgreSQL ALTER TABLE
语句中似乎不支持上述(或类似)(至少尚未支持).
最后的想法是CREATE TABLE
在发送查询之前检索Django模型生成的语句,例如模型sql = Measurement.get_statement() …
我遇到了一个看似简单的问题:在pandas数据帧中删除唯一的行.基本上,相反drop_duplicates()
.
让我们说这是我的数据:
A B C
0 foo 0 A
1 foo 1 A
2 foo 1 B
3 bar 1 A
Run Code Online (Sandbox Code Playgroud)
当A和B是唯一的时候我想删除行,即我只想保留第1行和第2行.
我尝试了以下方法:
# Load Dataframe
df = pd.DataFrame({"A":["foo", "foo", "foo", "bar"], "B":[0,1,1,1], "C":["A","A","B","A"]})
uniques = df[['A', 'B']].drop_duplicates()
duplicates = df[~df.index.isin(uniques.index)]
Run Code Online (Sandbox Code Playgroud)
但我只得到第2行,因为0,1和3都是唯一的!
我对SQLAlchemy中的字符集和编码方式非常困惑.我理解(并已阅读)字符集和编码之间的区别,我对编码的历史有一个很好的了解.
我在latin1_swedish_ci中有一个MySQL表(为什么?可能因为这个).我需要创建一个pandas数据帧,在其中我得到正确的字符(而不是奇怪的符号).最初,这是在代码中:
connect_engine = create_engine('mysql://user:password@1.1.1.1/db')
sql_query = "select * from table1"
df = pandas.read_sql(sql_query, connect_engine)
Run Code Online (Sandbox Code Playgroud)
我们开始遇到Š
角色的麻烦(对应于u'\u0160'
unicode,但我们得到'\ x8a').我希望这可行:
connect_engine = create_engine('mysql://user:password@1.1.1.1/db', encoding='utf8')
Run Code Online (Sandbox Code Playgroud)
但是,我继续得到'\x8a'
,我意识到,鉴于编码参数的默认值是有意义的utf8
.那么,我试图encoding='latin1'
解决这个问题:
connect_engine = create_engine('mysql://user:password@1.1.1.1/db', encoding='latin1')
Run Code Online (Sandbox Code Playgroud)
但是,我仍然得到相同的'\ x8a'.要明确,在这两种情况下(encoding='utf8'
和encoding='latin1'
),我都可以做mystring.decode('latin1')
但不能 mystring.decode('utf8')
.
然后,我重新发现charset
了连接字符串中的参数,即'mysql://user:password@1.1.1.1/db?charset=latin1'
.在尝试了所有可能的charset和编码组合后,我发现这个工作:
connect_engine = create_engine('mysql://user:password@1.1.1.1/db?charset=utf8')
Run Code Online (Sandbox Code Playgroud)
如果有人能解释我如何正确使用连接字符串中的参数,我将不胜感激?charset
encoding
create_engine
有相当多的人不知道在替代相关性的联系setup.py
(与PIP标志激活--process-dependency-links
):什么是替代使用与PIP --process依赖性链接,
取决于setup.py git仓库.基本上,我被弃用警告所困扰:
"DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release."
Run Code Online (Sandbox Code Playgroud)
有些人建议使用requirements.txt
,但这不是一种替代方案,因为它旨在提供整个环境,通常与开发更相关.本install_requires
应该提供一种最低限度是必要的标准功能的工作,所以,当你做这样的事情库的pip install [LIBRARY]
,在安装所需的一切,没有任何进一步的pip install -r requirements.txt
(我指的情况下,在其中图书馆paramater pip install [LIBRARY]
将以URL的形式出现git+http:\\github.com\username\repo.git
.
我弃用的问题是我不能引用内部/私有包,但是如果需要在git中引用特定的提交或分支,我也可以看到这可能是一个问题(至少我知道我在过去).
总而言之,dependency_links的使用很复杂,例如语法并不总是很清楚,存在几种指定URL的方法,人们往往会忘记他们必须将库的名称版本放在列表dependency_links
和install_requires
列表中.我想听到这种弃用有利于改进,但似乎并非如此
那么,总结一下,弃用依赖关系链接的原因是什么?依赖链接的弃用是否有利于更好的替代方案?似乎没有其他选择
我正在尝试使用 chargroup 分词器构建基于空格和标点符号的分词器。我发现至少有5 个预定义字符组:whitespace
, letter
, digit
, punctuation
, symbol
。
所以,我尝试了以下标记器:
\n\ntokenizer": {\n "my_tokenizer": { \n "type": "char_group", \n "tokenize_on_chars":["whitespace", "punctuation"]\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n然后,我意识到该@
符号包含在punctuation
我需要作为文本一部分的字符组中(例如捕获 Twitter 屏幕名称)。我不确定为什么@
被认为是标点符号,但我的猜测是它可以在电子邮件地址中被视为标点符号?例如email@example.com
。
无论如何,我自己添加了它们:
\n\ntokenizer": {\n "my_tokenizer": { \n "type": "char_group", \n "tokenize_on_chars":["whitespace", "\\n", ".", ",", ";", ":", "\\"", "`", "]", "[", ")", "(", "!", "?", "/", "\\\\", "\xe2\x80\x93"]\n }\n},\n\n
Run Code Online (Sandbox Code Playgroud)\n\n然而,这个列表看起来相当随意,而且不太优雅。在哪里可以找到elasticsearch中不同字符组的定义?(或者,是否有一种更优雅的方法来根据standard
英语和德语的标点符号列表来分隔标记?)。
我想制作一个分面网格,以变量名称为列,以部门为行,每个小图表是 y=value 和 x=date 的散点图
我的数据有点像这样:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib.dates as mdates
import random
datelist = pd.date_range(start="march 1 2020", end="may 20 2020", freq="w").tolist()
varlist = ["x", "y", "z", "x", "y", "z", "x", "y", "z", "x", "y", "z"]
deptlist = ["a", "a", "b", "a", "a", "b", "a", "a", "b", "a", "a", "b"]
vallist = random.sample(range(10, 30), 12)
df = pd.DataFrame({'date': datelist, 'value': vallist, …
Run Code Online (Sandbox Code Playgroud) 我只是意识到在使用with
Python语句在Kivy中添加顶点指令的方式中有一些神秘的东西(至少对我而言).例如,使用的方式with
是这样的:
... some code
class MyWidget(Widget)
... some code
def some_method (self):
with self.canvas:
Rectangle(pos=self.pos, size=self.size)
Run Code Online (Sandbox Code Playgroud)
一开始我认为这只是with
偶尔使用的Python语句.但我突然意识到事实并非如此.通常它看起来更像这样(从这里取的例子):
with open('output.txt', 'w') as f:
f.write('Hi there!')
Run Code Online (Sandbox Code Playgroud)
as
实例之后通常会有一个类似于对象的别名.在Kivy示例中,我们没有定义和别名哪个仍然可以.但困扰我的部分是指令Rectangle仍然与self.canvas相关联.在阅读完该with
声明之后,我确信Kivy代码应该写成:
class MyWidget(Widget)
... some code
def some_method (self):
with self.canvas as c:
c.add (Rectangle(pos=self.pos, size=self.size))
Run Code Online (Sandbox Code Playgroud)
我假设在内部方法add
是被调用的方法.假设我们可以简单地添加矩形self.add (Rectangle(pos=self.pos, size=self.size))
我错过了关于with
Python语句的一些内容吗?或者这是Kivy实施的某种方式?
如果之前有人问过,请道歉,不知怎的,我无法找到答案.
假设我有两个值列表:
rows = [0,1,2]
cols = [0,2,3]
Run Code Online (Sandbox Code Playgroud)
它分别代表行和列的索引.这两个列表在矩阵中组合了表示的坐标,即(0,0),(1,2),(2,3).
我想使用这些坐标来改变dataframe
不使用循环的特定单元格.
在numpy中,这是微不足道的:
data = np.ones((4,4))
data[rows, cols] = np.nan
array([[nan, 1., 1., 1.],
[ 1., 1., nan, 1.],
[ 1., 1., 1., nan],
[ 1., 1., 1., 1.]])
Run Code Online (Sandbox Code Playgroud)
但在熊猫中,我似乎陷入了一个循环:
df = pd.DataFrame(np.ones((4,4)))
for _r, _c in zip(rows, cols):
df.iat[_r, _c] = np.nan
Run Code Online (Sandbox Code Playgroud)
有没有办法用于列出类似坐标索引的向量来直接修改pandas中的单元格?
请注意,答案不是使用iloc,而是选择整个行和列的交集.
python ×5
pandas ×4
kivy ×2
dataframe ×1
difflib ×1
django ×1
mysql ×1
pip ×1
postgresql ×1
python-3.x ×1
seaborn ×1
setup.py ×1
setuptools ×1
similarity ×1
sqlalchemy ×1
string ×1