小编tot*_*ico的帖子

如何根据Widget Kivy属性更新动态添加的**Ellipse(不使用Builder)的颜色?

这与另一个问题非常相关.唯一的区别是我是动态添加Ellipse with self.canvas而不是使用Builder(Builder.load_stringBuilder.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)

kivy

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

是否有返回索引(列表位置)而不是 str 列表的 `difflib.get_close_matches()` 的替代方法?

我想使用类似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)进行一对一比较。但是,我担心这会非常低效,因为:

  1. 我将不得不创建数千个 SequenceMatcher 对象并比较它们(我希望get_close_matches避免使用该类):

    编辑:错误。我检查了 的源代码get_close_matches,它实际上使用SequenceMatcher.

  2. 没有截止(我猜有一种优化可以避免计算所有字符串的比率)

    编辑:部分错误。该代码是get_close_matches没有任何重大的优化,除了它使用real_quick_ratioquick_ratioratio产品总数。无论如何,我可以轻松地将优化复制到我自己的函数中。我也没有考虑到 SequenceMatcher 有设置序列的方法:set_seq1, set_seq2,所以至少我不必每次都创建一个对象。

  3. 据我了解,所有 python 库都是 C 编译的,这会提高性能。 …

python string similarity difflib python-3.x

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

如何在Django模型中集成postgresql 10/11声明表分区(即PARTITION BY子句)?

PostgreSQL 10引入了带子句的声明性表分区PARTITION BY,我想将它用于Django模型.

原则上我需要做的就是在Django ORM创建PARTITION BYCREATE 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() …

django postgresql database-partitioning

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

如何删除pandas数据帧中的唯一行?

我遇到了一个看似简单的问题:在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都是唯一的!

python dataframe pandas

7
推荐指数
1
解决办法
5762
查看次数

如何在SQLAlchemy的`create_engine`中使用`charset`和`encoding`(创建pandas数据帧)?

我对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)

如果有人能解释我如何正确使用连接字符串中的参数,我将不胜感激charsetencodingcreate_engine

mysql connection-string sqlalchemy pandas

7
推荐指数
4
解决办法
1万
查看次数

为什么不推荐使用setup.py中的依赖关系链接?

有相当多的人不知道在替代相关性的联系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_linksinstall_requires列表中.我想听到这种弃用有利于改进,但似乎并非如此

那么,总结一下,弃用依赖关系链接的原因是什么?依赖链接的弃用是否有利于更好的替代方案?似乎没有其他选择

python pip setuptools setup.py

7
推荐指数
1
解决办法
2082
查看次数

Elastic Search 字符组中包含哪些字符(空格、字母、数字、标点符号、符号)?

我正在尝试使用 chargroup 分词器构建基于空格和标点符号的分词器。我发现至少有5 个预定义字符组whitespace, letter, digit, punctuation, symbol

\n\n

所以,我尝试了以下标记器:

\n\n
tokenizer": {\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\n

无论如何,我自己添加了它们:

\n\n
tokenizer": {\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英语和德语的标点符号列表来分隔标记?)。

\n

elasticsearch

7
推荐指数
1
解决办法
1181
查看次数

使用 Seaborn FacetGrid 设置日期标签格式

我想制作一个分面网格,以变量名称为列,以部门为行,每个小图表是 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)

pandas seaborn

7
推荐指数
1
解决办法
2111
查看次数

`with canvas:`(Python`with something()as x:`)如何隐式地在Kivy中工作?

我只是意识到在使用withPython语句在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))

我错过了关于withPython语句的一些内容吗?或者这是Kivy实施的某种方式?

python kivy

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

如何使用存储在两个列表/向量/系列中的"类坐标"索引更改数据框单元格值?

如果之前有人问过,请道歉,不知怎的,我无法找到答案.

假设我有两个值列表:

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 pandas

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