【问题标题】:Troubles with Python - Postgresql on Jupyter Notebook | Mac OSXPython 的问题 - Jupyter Notebook 上的 Postgresql Mac OSX
【发布时间】:2019-05-29 15:47:31
【问题描述】:

我目前正在 Mac OSX Mojave 10.14 中使用 Python 代码开发 Jupyter 笔记本。 我正在使用 Psycopg2 将数据从 PostgreSQL 获取到 Python Dataframe。

问题是代码在 Win 10 中以两种方式运行良好,但我无法从 Mac OSX 中的同一查询中获取数据。

我没有收到任何错误,我只是得到一个空的数据框。而已。没有错误,没有警告。

有人遇到过同样的问题吗?

使用的代码如下:

第一个选项:

cursor = conn.cursor()
query = """select * from table"""

cursor.execute(query)
data = data.append(cursor.fetchall())
data.columns = [desc[0] for desc in cursor.description]

第二个选项:

data= pd.DataFrame()

for chunk in pd.read_sql("""select * from table""", con=conn, chunksize=5000):
    data= data.append(chunk)

我希望有一个包含来自 PostgreSQL 的数据的 Dataframe。

【问题讨论】:

  • 你的data 是什么?它是一个 Python 列表,data.append 不会返回更新后的列表,它会改变列表 (data) 并返回 None。所以data = data.append(...) 有效地将data 设置为None。它还将所有行追加到一个元素中;你可能需要deta.extend()
  • @Zoe data 是在查询之前创建的新 DataFrame,而不是 Python 列表。就像我说的,在 Win 10 中它运行完美,但我在 Mac Osx 中遇到问题,使用相同的工具和环境。当我尝试执行 data.extend() 时,我收到错误 AttributeError: 'DataFrame' object has no attribute 'extend'
  • 请在 Mac OSX 中发布所有问题/错误/不需要的结果。简单地说我没有得到数据是没有帮助的。其次Never call DataFrame.append or pd.concat inside a for-loop. It leads to quadratic copying..
  • @Parfait 没有得到任何错误,我只是得到一个空的 DataFrame。我没有什么可显示的,因为不存在错误。我检查了几次代码。其次,感谢您的链接。我要改变编码的方式。现在我知道效率低下。
  • 两个脚本都指向同一个 Postgres 后端吗?也许它是一个没有数据的数据库副本? Win和Mac都在同一台服务器上还是远程?我怀疑 psycop2 的行为因操作系统而异。

标签: python postgresql jupyter-notebook data-science


【解决方案1】:

问题是我在查询之前有一个 '%%time' 语句,以获取单元格的执行时间。有趣的。在 Mac OSX 中似乎不适用于下面的一段代码。

【讨论】:

  • 问题是ipython 7.4的bug,如果你降级到7.3或者升级到7.5你可以再次使用%%time。
猜你喜欢
  • 1970-01-01
  • 2019-09-10
  • 2019-03-15
  • 2023-02-16
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2021-03-24
相关资源
最近更新 更多