小编n10*_*000的帖子

psycopg2:AttributeError:'module'对象没有属性'extras'

在我的代码我用的是DictCursorpsycopg2.extras这样的

dict_cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
Run Code Online (Sandbox Code Playgroud)

但是,当我加载游标时,突然间我收到以下错误:

AttributeError: 'module' object has no attribute 'extras'
Run Code Online (Sandbox Code Playgroud)

也许在我的装置中有些东西,但我不知道从哪里开始寻找.我用pip做了一些更新,但据我所知,没有依赖关系psycopg2.

python psycopg2 importerror

72
推荐指数
2
解决办法
2万
查看次数

如何找到(seaborn)KDE图中的中位数?

我正在尝试用seaborn 进行核密度估计(KDE)图并找到中位数.代码看起来像这样:

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

sns.set_palette("hls", 1)
data = np.random.randn(30)
sns.kdeplot(data, shade=True)

# x_median, y_median = magic_function()
# plt.vlines(x_median, 0, y_median)

plt.show()
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我需要magic_function()从中获取中值x和y值kdeplot.然后我想用例如vlines.但是,我无法弄清楚如何做到这一点.结果应该看起来像这样(显然黑色中间条在这里是错误的):

在此输入图像描述

我想我的问题与seaborn并不严格相关,也适用于其他类型的matplotlib图.任何想法都非常感谢.

python plot matplotlib seaborn

17
推荐指数
1
解决办法
6604
查看次数

如何更好地适应seaborn小提琴情节?

下面的代码给了我一个非常好的小提琴图(和内部的boxplot).

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

foo = np.random.rand(100)
sns.violinplot(foo)
plt.boxplot(foo)
plt.show()
Run Code Online (Sandbox Code Playgroud)

产量

到现在为止还挺好.但是,当我查看时foo,变量不包含任何负值.该seaborn地块似乎这里误导.正常的matplotlib箱图提供了更接近我期望的东西.

如何制作更合适的小提琴曲线(不显示假阴性值)?

python statistics plot seaborn

12
推荐指数
1
解决办法
4669
查看次数

如何改变seaborn线性回归关节图中的线条颜色

seaborn API中所述,以下代码将生成线性回归图.

import numpy as np, pandas as pd; np.random.seed(0)
import seaborn as sns; sns.set(style="white", color_codes=True)
tips = sns.load_dataset("tips")
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg')
sns.plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,由于有很多数据点,回归线不再可见.我怎样才能改变它的颜色?我找不到内置的seaborn命令.

如果线在背景中(即在点后面),我还想问如何将它带到前面.

matplotlib seaborn

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

在 Postgresql 中从 SELECT 插入多行

如 PostgreSQL手册中所述,可以在单个INSERT语句中添加多行:

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
    ('6120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
Run Code Online (Sandbox Code Playgroud)

SELECT像这样的嵌套查询也有效:

INSERT INTO films (code, title, did, date_prod, kind)
     SELECT table.code, 'Tampopo', 110, '1985-02-10', 'Comedy'
     FROM other_table AS table2;
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法想出一种同时进行的方法:

INSERT INTO films (code, title, did, date_prod, kind) 
SELECT
    (table.code + 100, 'abc', NULL, t2.date_prod, t2.kind),
    (table.code + 200, 'xyz', NULL, t2.date_prod, t2.kind)
FROM other_table AS t2;
Run Code Online (Sandbox Code Playgroud)

如果other_table只包含(61717 | …

sql postgresql

7
推荐指数
2
解决办法
9838
查看次数

将psycopg2 DictRow查询转换为Pandas数据帧

我想将psycopg2DictRow查询转换为pandas数据帧,但是pandas一直在抱怨:

curs = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
curs.execute("SELECT * FROM mytable")
data = curs.fetchall()

print type(data)
print pd.DataFrame(list(data))
Run Code Online (Sandbox Code Playgroud)

但是,我总是得到一个错误,虽然我特意通过了list???

<type 'list'>
TypeError: Expected list, got DictRow
Run Code Online (Sandbox Code Playgroud)

如果我这样做的结果是一样的pd.DataFrame(data)可以有人请帮我做这个工作吗?

如果数据帧的列名称有效(即提取DictRow并将它们传递给数据帧)也会很好.

更新:
由于我需要处理数据,我想按原样使用psycopg2查询中的数据而不是pandas方法,例如read_sql_query.

python psycopg2 pandas

7
推荐指数
2
解决办法
4028
查看次数

在python工作流中调整Postgresql性能和内存使用

我使用Postgresql 9.4作为模型数据库.我的表看起来有点像这样:

CREATE TABLE table1 (
sid INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('table1_sid_seq'::regclass),
col1 INT, 
col2 INT,
col3 JSONB);
Run Code Online (Sandbox Code Playgroud)

我的Python 2.7工作流通常如下所示:

curs.execute("SELECT sid, col1, col2 FROM table1")
data = curs.fetchall()
putback = []
for i in data: 
    result = do_something(i[1], i[2])
    putback.append((sid, result))
del data
curs.execute("UPDATE table1
              SET col3 = p.result
              FROM unnest(%s) p(sid INT, result JSONB)
              WHERE sid = p.sid", (putback,))
Run Code Online (Sandbox Code Playgroud)

这通常可以很好地有效地工作.但是,对于大型查询,Postgresql内存使用有时会在UPDATE命令期间通过屋顶(> 50GB),我相信它正被OS X杀死,因为我得到了WARNING: terminating connection because of crash of another server process.我的Macbook Pro有16GB的RAM,有问题的查询有11M行,每行大约有100个字符要回写. …

python memory postgresql performance psycopg2

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

为什么在 Python 中“请求宽恕比获得许可更容易”?

为什么“请求宽恕比获得许可更容易”( EAFP ) 被认为是 Python 中的好习惯?作为一名编程新手,我的印象是,try...except与使用其他检查相比,使用许多例程会导致代码臃肿且可读性较差。

EAFP 方法的优势是什么?

NB:我知道这里也有类似的问题,但他们大多是指一些具体的例子,而我更感兴趣的是原理背后的哲学。

python coding-style

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

如何使用 Python / psycopg2 高效更新大型 PostgreSQL 表中的列?

我有一张大桌子,上面有大约。PostgreSQL 9.4 数据库中有 1000 万行。它看起来有点像这样:

\n\n
gid | number1 | random |\xc2\xa0result |\xc2\xa0...\n 1  |    2    |  NULL  |  NULL  |\xc2\xa0...\n 2  |   15    |  NULL  |  NULL  | ...\n... |   ...   |   ...  |  ...   | ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我想更新列randomresult作为 的函数number1。这意味着至少random需要在数据库外部的脚本中生成。由于我的 RAM 有限,我想知道如何使用psycopg2. 我相信我面临两个问题:如何在不使用太多 RAM 的情况下获取数据以及如何将其放回原处。简单方法看起来像这样:

\n\n
curs.execute("""SELECT gid1, number1 FROM my_table;""")\ndata = curs.fetchall()\n\nresult = []\nfor i in data:\n    result.append((create_random(i[1]), i[0]))\ncurs.executemany("""UPDATE my_table\n                    SET random = %s\n                    WHERE gid = %s;""",\n …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2 sql-update

5
推荐指数
1
解决办法
3820
查看次数

在Python中使用范围作为字典索引

有可能做这样的事情:

r = {range(0, 100): 'foo', range(100, 200): 'bar'}

print r[42]

> 'foo'
Run Code Online (Sandbox Code Playgroud)

所以我想使用数值范围作为字典索引的一部分.为了使事情变得更复杂,我还想使用多索引('a', range(0,100)).所以这个概念应该理想地扩展到那个.有什么建议?

这里也提出了类似的问题,但我对全面实施感兴趣,而不是该问题的不同方法.

python dictionary

5
推荐指数
3
解决办法
5001
查看次数