知乎这篇讲pandas和sql各自擅长的领域。pandas我不是特别熟,不过我看就下面这段pandas代码,完全用sql也是很容易的。
https://www.zhihu.com/question/40269042 ... 1877217409
代码: 全选
import pandas as pd
from sqlalchemy import create_engine
# 假设你已经配置好了数据库连接
db_connection_str = 'mysql+pymysql://user:password@host/dbname'
db_connection = create_engine(db_connection_str)
# 读取SQL查询的结果到DataFrame
# 注意,这里是读取查询结果,不是全表!
sql_query = """
SELECT
product_id,
product_name,
quantity,
price,
order_time
FROM
orders
WHERE
order_time >= '2023-10-01' AND order_time < '2023-11-01'
AND category = 'A';
"""
df = pd.read_sql(sql_query, con=db_connection)
# --- 现在进入Pandas的主场 ---
# 1. 数据清洗(假设有缺失值)
df.dropna(inplace=True)
# 2. 计算每个订单的销售额
df['sales'] = df['quantity'] * df['price']
# 3. 按产品ID分组,计算总销售额和总销量,找出爆款
product_summary = df.groupby('product_id').agg(
total_sales=('sales', 'sum'),
total_quantity=('quantity', 'sum'),
product_name=('product_name', 'first') # 顺便把名字带出来
).sort_values(by='total_sales', ascending=False)
print("--- 销售额 Top 10 爆款 ---")
print(product_summary.head(10))
# 4. 分析周内销售趋势,看看周末是不是卖得好
df['order_time'] = pd.to_datetime(df['order_time'])
df['weekday'] = df['order_time'].dt.dayofweek # 0=周一, 6=周日
weekday_sales = df.groupby('weekday')['sales'].sum()
print("\n--- 周内销售分布 ---")
print(weekday_sales)
# 5. 接下来你还可以做可视化、跑关联规则、做价格敏感度分析……
# 这些复杂的、探索性的操作,用SQL写会非常非常痛苦,但在Pandas里就是几行代码的事。





