有没有办法在熊猫数据框中运行 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 查询?的主要内容,如果未能解决你的问题,请参考以下文章