有没有办法在熊猫数据框中运行 postgresql 查询?

Posted

技术标签:

【中文标题】有没有办法在熊猫数据框中运行 postgresql 查询?【英文标题】:Is there a way to run posqresql queries in a pandas dataframe? 【发布时间】:2021-04-10 22:57:14 【问题描述】:

我有这样的熊猫数据框:

created_at lat long hex_ID
0 2020-10-13 15:12:18.682905 28.690628 77.323285 883da1ab0bfffff
1 2020-10-12 22:49:05.886170 28.755408 77.112289 883da18e87fffff
2 2020-10-13 15:24:17.692375 28.690571 77.323335 883da1ab0bfffff
3 2020-10-12 23:21:13.700226 28.589922 77.082738 883da112a1fffff
4 2020-10-13 15:43:58.887592 28.649227 77.339063 883da1a941fffff

我想像这样转换它

created_at hex_id count
0 2020-10-28 22:00:00 883da11185fffff 4
1 2020-09-09 10:00:00 883da111ebfffff 2
2 2020-12-02 20:00:00 883da10769fffff 2
3 2020-10-16 07:00:00 883da111c3fffff 1
4 2020-12-13 11:00:00 883da11747fffff 4

到目前为止,我正在将数据框转储到 postgres 中并运行以下查询,然后导出数据并最后导入到我的笔记本中。

查询:

SELECT created_at('hour', timestamp),count(lat),hex_id FROM public."ML_Data"
group by created_at('hour', timestamp),hex_id

我想知道我是否可以直接在笔记本文件中进行操作

【问题讨论】:

也许看看pd.read_sql 或者你可以简单地做一个 pd.DataFrame.groupby 而不是将它转储到 postgres 中进行聚合。 @ABC 我试过 pd.read_Sql 但我不认为上面的查询会在它上面运行并且 group by 是好的,但我想要特定格式的数据框,有没有参考代码 【参考方案1】:

只需在 df 中使用 groupy。

# 2020-10-13 15:12:18.682905 -> 2020-10-13 15:00:00
df['created_at_n'] = df['created_at'].astype(str).str.split(':').str[0] + ':00:00'
df.groupby(['created_at_n', 'hex_id'])['lat'].count()

【讨论】:

【参考方案2】:

通常我使用psycopg2从postgres中获取数据,示例代码:

import psycopg2
from psycopg2 import sql

with psycopg2.connect(
        host='your_host',
        database='your_database',
        user='your_username',
        password='your_password') as con: 

    cursor = con.cursor()

    query = sql.SQL('your_query_string')
    cursor.execute(query)
    
    data = cursor.fetchall()
    data = pd.DataFrame(data, columns=col_names) # your data column names

或者我认为你可以pd.read_sql,看看这个post。

【讨论】:

让我分享一些关于我的数据的更多见解,我已经将我的笔记本连接到数据库,并使用 pycopg2 查询了数据。从中我得到 3 列 1.created_at 2.lat 3.long 从这些 lat long 使用 python 库 H3 ,我正在生成 hex_id 。 .所以这样做我得到了第一个表,现在我想将第一个表转换为提供的第二个表, 那么您可以使用 .groupby 作为@Ferris 为您提供的示例。

以上是关于有没有办法在熊猫数据框中运行 postgresql 查询?的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框中提取嵌套字典

在熊猫数据框中按行应用时如何保留数据类型?

如何在 Pandas 数据框中的特定位置插入一列? (更改熊猫数据框中的列顺序)

如何在熊猫数据框中捕获连字符分隔数字的平均值?

我是不是需要将文件放入熊猫数据框中以放入镶木地板格式?

如何更改熊猫中多列的数据类型