【发布时间】: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