用联接加载多张表

使用 pandas 高效导入数据

Amany Mahfouz

Instructor

  • 数据库记录有唯一标识符(键)

311 来电数据,已高亮 unique_key 列。唯一键是数字。

使用 pandas 高效导入数据

  • 数据库记录有唯一标识符(键)

课程目录数据,已高亮 course_code 列。代码由学科缩写和数字组成。

使用 pandas 高效导入数据

  • 数据库记录有唯一标识符(键)

课程目录数据,已高亮 instructor_id 列。取值为 9 位整数。

使用 pandas 高效导入数据

教授表,已高亮 id 列。取值为 9 位整数,与课程目录中的 instructor_id 相同格式。

使用 pandas 高效导入数据

课程目录数据,已联接教授姓名列

使用 pandas 高效导入数据

表联接

天气数据,已高亮 date 列

311 来电数据,已高亮 created_date 列

使用 pandas 高效导入数据

表联接

SELECT *
  FROM hpd311calls
使用 pandas 高效导入数据

表联接

SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date;
  • 多表时用点号表示法(table.column
  • 默认联接只返回两表键都出现的记录
  • 确保联接键数据类型一致,否则不匹配
使用 pandas 高效导入数据

联接与筛选

/* 仅获取供暖/热水来电,并联接天气数据 */
SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date
 WHERE hpd311calls.complaint_type = 'HEAT/HOT WATER';
使用 pandas 高效导入数据

联接与聚合

/* 按行政区统计来电数量 */
SELECT hpd311calls.borough, 
         COUNT(*)
  FROM hpd311calls
 GROUP BY hpd311calls.borough;
使用 pandas 高效导入数据

联接与聚合

/* 按行政区统计来电数,
   并联接人口与住房数量 */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
 GROUP BY hpd311calls.borough
使用 pandas 高效导入数据

联接与聚合

/* 按行政区统计来电数,
   并联接人口与住房数量 */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
       JOIN boro_census 
       ON hpd311calls.borough = boro_census.borough
 GROUP BY hpd311calls.borough;
使用 pandas 高效导入数据
query = """SELECT hpd311calls.borough, 
                    COUNT(*), 
                    boro_census.total_population,
                    boro_census.housing_units
             FROM hpd311calls
                  JOIN boro_census 
                  ON hpd311calls.borough = boro_census.borough
            GROUP BY hpd311calls.borough;"""

call_counts = pd.read_sql(query, engine)
print(call_counts)
         borough  COUNT(*)  total_population  housing_units
0          BRONX     29874           1455846         524488
1       BROOKLYN     31722           2635121        1028383
2      MANHATTAN     20196           1653877         872645
3         QUEENS     11384           2339280         850422
4  STATEN ISLAND      1322            475948         179179
使用 pandas 高效导入数据

复习

  • SQL 关键字顺序
    • SELECT
    • FROM
    • JOIN
    • WHERE
    • GROUP BY
使用 pandas 高效导入数据

Vamos praticar!

使用 pandas 高效导入数据

Preparing Video For Download...