【问题标题】:Is there a way to run posqresql queries in a pandas dataframe?有没有办法在熊猫数据框中运行 postgresql 查询?
【发布时间】: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 是好的,但我想要特定格式的数据框,有没有参考代码

标签: sql pandas postgresql time-series pandas-groupby


【解决方案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 为您提供的示例。
    猜你喜欢
    • 1970-01-01
    • 2020-09-23
    • 2019-06-29
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    相关资源
    最近更新 更多