Pandas秘籍【第九章】

本文介绍了如何使用Pandas从SQL数据库读取数据并写入数据。包括使用read_sql函数读取不同类型的SQL数据库,如SQLite、MySQL和PostgreSQL等,并展示了如何利用to_sql函数将DataFrame写入SQLite数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:Chapter 9

import pandas as pd
import sqlite3

到目前为止,我们只涉及从 CSV 文件中读取数据。 这是一个存储数据的常见方式,但有很多其它方式! Pandas 可以从 HTML,JSON,SQL,Excel(!!!),HDF5,Stata 和其他一些东西中读取数据。 在本章中,我们将讨论从 SQL 数据库读取数据。

您可以使用pd.read_sql函数从 SQL 数据库读取数据。 read_sql将自动将 SQL 列名转换为DataFrame列名。

read_sql需要 2 个参数:SELECT语句和数据库连接对象。 这是极好的,因为它意味着你可以从任何种类的 SQL 数据库读取 - 无论是 MySQL,SQLite,PostgreSQL 或其他东西。

此示例从 SQLite 数据库读取,但任何其他数据库将以相同的方式工作。

con = sqlite3.connect("../data/weather_2012.sqlite")
df = pd.read_sql("SELECT * from weather_2012 LIMIT 3", con)
df
iddate_timetemp
012012-01-01 00:00:00
122012-01-01 01:00:00
232012-01-01 02:00:00

read_sql不会自动将主键(id)设置为DataFrame的索引。 你可以通过向read_sql添加一个index_col参数来实现。

如果你大量使用read_csv,你可能已经看到它有一个index_col参数。 这个行为是一样的。

df = pd.read_sql("SELECT * from weather_2012 LIMIT 3", con, index_col='id')
df
date_timetemp
id
12012-01-01 00:00:00
22012-01-01 01:00:00
32012-01-01 02:00:00

如果希望DataFrame由多个列索引,可以将列的列表提供给index_col

df = pd.read_sql("SELECT * from weather_2012 LIMIT 3", con, 
                 index_col=['id', 'date_time'])
df
temp
iddate_time
12012-01-01 00:00:00
22012-01-01 01:00:00
32012-01-01 02:00:00

9.2 写入 SQLite 数据库

Pandas 拥有write_frame函数,它从DataFrame创建一个数据库表。 现在这只适用于 SQLite 数据库。 让我们使用它,来将我们的 2012 天气数据转换为 SQL。

你会注意到这个函数在pd.io.sql中。 在pd.io中有很多有用的函数,用于读取和写入各种类型的数据,值得花一些时间来探索它们。 (请参阅文档!

weather_df = pd.read_csv('../data/weather_2012.csv')
con = sqlite3.connect("../data/test_db.sqlite")
con.execute("DROP TABLE IF EXISTS weather_2012")
weather_df.to_sql("weather_2012", con)

我们现在可以从test_db.sqlite中的weather_2012表中读取数据,我们看到我们得到了相同的数据:

con = sqlite3.connect("../data/test_db.sqlite")
df = pd.read_sql("SELECT * from weather_2012 LIMIT 3", con)
df
indexDate/TimeTemp (C)Dew Point Temp (C)Rel Hum (%)Wind Spd (km/h)Visibility (km)Stn Press (kPa)Weather
002012-01-01 00:00:00-1.8-3.98648101.24
112012-01-01 01:00:00-1.8-3.78748101.24
222012-01-01 02:00:00-1.8-3.48974101.26

在数据库中保存数据的好处在于,可以执行任意的 SQL 查询。 这非常酷,特别是如果你更熟悉 SQL 的情况下。 以下是Weather列排序的示例:

indexDate/TimeTemp (C)Dew Point Temp (C)Rel Hum (%)Wind Spd (km/h)Visibility (km)Stn Press (kPa)Weather
0672012-01-03 19:00:00-16.9-24.8502425101.74
11142012-01-05 18:00:00-7.1-14.4561125100.71
21152012-01-05 19:00:00-9.2-15.461725100.80

如果你有一个 PostgreSQL 数据库或 MySQL 数据库,从它读取的工作方式与从 SQLite 数据库读取完全相同。 使用psycopg2.connect()MySQLdb.connect()创建连接,然后使用

pd.read_sql("SELECT whatever from your_table", con)

9.3 连接到其它类型的数据库

为了连接到 MySQL 数据库:

注:为了使其正常工作,你需要拥有 MySQL/PostgreSQL 数据库,并带有正确的localhost,数据库名称,以及其他。

import MySQLdb con = MySQLdb.connect(host="localhost", db="test")

为了连接到 PostgreSQL 数据库:

import psycopg2 con = psycopg2.connect(host="localhost")
### Python数据分析第九章测试题或练习的相关内容 在Python数据分析领域,通常涉及的内容包括但不限于Pandas、NumPy、Matplotlib以及Seaborn等工具的使用。如果提到的是“第九章”的测试题或者练习,则可能来源于某本教材或者是在线课程的一部分。 #### 关于Python数据分析的核心知识点 Python数据分析主要依赖几个核心库来完成各种任务: - **Pandas** 是用于数据操作和分析的主要工具之一,提供了DataFrame结构以便高效处理表格型数据[^1]。 - **NumPy** 提供了高性能科学计算的基础支持,特别是数组对象及其运算功能[^1]。 - **Matplotlib 和 Seaborn** 则专注于数据可视化方面的工作,帮助用户更直观地理解数据分布及关系[^1]。 对于具体章节如“第九章”,虽然无法确切知道其具体内容来自哪一本书籍或教程,但可以根据常见主题推测该部分可能会覆盖如下范围: #### 可能的主题方向 1. **时间序列分析** 时间序列是一种特殊的数据形式,在金融行业等领域有着广泛应用。学习如何加载、转换及时序化的时间戳非常重要。 2. **分组聚合(GroupBy)** 使用`groupby()`函数能够实现复杂的数据分割与统计汇总过程,这是掌握大型数据集管理技巧的关键环节[^1]。 3. **数据清洗(Data Cleaning)** 实际世界中的原始数据往往存在缺失值、重复记录等问题,因此了解怎样有效清理这些问题是成为合格分析师的前提条件。 4. **合并(Merge)/连接(Join)多个表** 类似SQL里的JOIN语句那样,学会把不同来源的信息组合起来形成新的视角也是不可忽视的一环[^1]。 以下是针对以上假设情景给出的一个简单例子演示如何运用所学知识解决问题: ```python import pandas as pd import numpy as np # 创建示例 DataFrame data = {'Name': ['John', 'Anna', 'Peter'], 'Age': [28, 24, 35], 'City': ['New York', 'Paris', 'Berlin']} df = pd.DataFrame(data) print(df) ``` 此代码片段展示了创建一个基本的 Pandas DataFrame 并打印出来的方法[^1]。 #### 总结 由于未指定具体的书籍名称或者其他背景信息,“第九章”确实难以准确定位到特定资源上的题目集合。不过通过上述列举的一些典型话题可以帮助复习巩固已有的理论基础并尝试解答类似的考核项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值