看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)如何从 PostgreSQL(pgsql)数据库中读取数据到 pandas 的 DataFrame?
简单解答如下:
import pandas as pd
import psycopg2 as pg
engine = pg.connect("dbname='my_db_name' user='pguser' host='127.0.0.1' port='15432' password='pgpassword'")
df = pd.read_sql('select * from Stat_Table', con=engine)
首先,确保安装了 pandas、SQLAlchemy 和 psycopg2 这三个库。这些库分别用于数据处理、数据库连接以及 PostgreSQL 驱动。
pip install pandas sqlalchemy psycopg2-binary
假设我们有一个名为 test_db 的 PostgreSQL 数据库,其中有一个表 employees,结构如下:
INSERT INTO employees (name, age, department, hire_date) VALUES
('Alice', 30, 'HR', '2020-01-15'),
('Bob', 25, 'Engineering', '2021-03-22'),
('Charlie', 35, 'Marketing', '2019-07-10'),
('David', 28, 'Engineering', '2022-05-18');
插入一些示例数据:
INSERT INTO employees (name, age, department, hire_date) VALUES
('Alice', 30, 'HR', '2020-01-15'),
('Bob', 25, 'Engineering', '2021-03-22'),
('Charlie', 35, 'Marketing', '2019-07-10'),
('David', 28, 'Engineering', '2022-05-18');
Python 代码如下:
import pandas as pd
from sqlalchemy import create_engine
# 1. 创建数据库连接
engine = create_engine('postgresql+psycopg2://postgres:password@localhost:5432/test_db')
# 2. 定义 SQL 查询
query = "SELECT * FROM employees"
# 3. 读取所有数据
df_all = pd.read_sql(query, engine)
print("所有员工数据:")
print(df_all)
# 4. 指定索引列
df_index = pd.read_sql(query, engine, index_col='id')
print("\n指定索引列后的数据:")
print(df_index)
# 5. 参数化查询
department = 'Engineering'
df_param = pd.read_sql(
"SELECT * FROM employees WHERE department = %s",
engine,
params=(department,)
)
print(f"\n部门为 {department} 的员工:")
print(df_param)
# 6. 解析日期列
df_dates = pd.read_sql(
query,
engine,
parse_dates=['hire_date']
)
print("\n解析日期列后的数据类型:")
print(df_dates.dtypes)
# 7. 分块读取数据
chunksize = 2
print("\n分块读取数据:")
chunks = pd.read_sql(query, engine, chunksize=chunksize)
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}:")
print(chunk)
查看相关链接中的知识。
(完)
更新时间:Oct. 9, 2024, 5:21 p.m. 标签:pandas python 习题 pgsql