趋近智
尽管CSV和Excel文件在存储表格数据方面非常常用,但Pandas提供了从各种其他来源读取数据的灵活性,例如JSON文件和SQL数据库。
JSON(JavaScript对象表示法)是一种轻量级的数据交换格式。它使用人类可读的文本来传输由属性-值对和数组数据类型组成的数据对象。它经常用于Web应用程序和API。
设想您有数据存储在一个名为data.json的JSON文件中。JSON文件的结构很大程度上影响Pandas如何读取它。一种常见结构是记录(字典)列表,例如:
[
{"name": "Alice", "age": 30, "city": "New York"},
{"name": "Bob", "age": 24, "city": "Los Angeles"},
{"name": "Charlie", "age": 35, "city": "Chicago"}
]
要将其读取到DataFrame中,您可以使用pd.read_json()函数:
import pandas as pd
# 假设'data.json'包含上面显示的JSON结构
try:
df_json = pd.read_json('data.json')
print(df_json)
except FileNotFoundError:
print("Error: data.json not found. Please create it with the example content.")
# 直接从JSON字符串创建DataFrame的示例
json_string = """
[
{"name": "Alice", "age": 30, "city": "New York"},
{"name": "Bob", "age": 24, "city": "Los Angeles"},
{"name": "Charlie", "age": 35, "city": "Chicago"}
]
"""
df_from_string = pd.read_json(json_string)
# print(df_from_string) # 这将产生与从文件读取相同的输出
输出:
name age city
0 Alice 30 New York
1 Bob 24 Los Angeles
2 Charlie 35 Chicago
pd.read_json()有参数来处理不同的JSON结构。例如,如果您的JSON结构以键作为索引或列,您可能需要指定orient参数(例如,orient='index'、orient='columns'、orient='records')。默认的orient=None会尝试推断结构,这对于上面显示的常见记录列表格式通常运行良好。
Pandas可以直接与SQL数据库交互,允许您执行查询并将结果加载到DataFrame中。这需要一个名为SQLAlchemy的额外库来处理不同SQL数据库类型(如PostgreSQL、MySQL、SQLite等)的数据库连接详情。
首先,您通常使用SQLAlchemy建立连接引擎:
# 注意:您需要安装SQLAlchemy:pip install sqlalchemy
# 您可能还需要一个特定于数据库的驱动,例如PostgreSQL的psycopg2
from sqlalchemy import create_engine
import pandas as pd
# 连接到名为'my_database.db'的SQLite数据库文件的示例
# 替换为您的实际数据库连接字符串
# 格式:'dialect+driver://username:password@host:port/database'
try:
# 创建一个引擎对象。SQLite连接到文件。
# 其他数据库需要不同的连接字符串。
engine = create_engine('sqlite:///my_database.db')
# 假设'my_database.db'存在且有一个名为'users'的表
# 示例:创建虚拟表和数据以进行演示
with engine.connect() as connection:
connection.execute("DROP TABLE IF EXISTS users") # 为了示例,重新开始
connection.execute("CREATE TABLE users (name TEXT, age INTEGER, city TEXT)")
connection.execute("INSERT INTO users (name, age, city) VALUES ('David', 42, 'Boston')")
connection.execute("INSERT INTO users (name, age, city) VALUES ('Eve', 29, 'Miami')")
# 现在,使用Pandas读取数据
# 选项1:读取整个表
df_sql_table = pd.read_sql_table('users', con=engine)
print("--- Reading entire table ---")
print(df_sql_table)
# 选项2:执行特定的SQL查询
query = "SELECT name, city FROM users WHERE age > 30"
df_sql_query = pd.read_sql_query(query, con=engine)
print("\n--- Reading specific query results ---")
print(df_sql_query)
except ImportError:
print("SQLAlchemy is required but not installed. Run: pip install sqlalchemy")
except Exception as e:
# 捕获其他潜在错误,如数据库未找到或连接问题
print(f"An error occurred: {e}")
print("Ensure 'my_database.db' exists or adjust the connection string.")
输出(假设连接和表创建成功):
--- Reading entire table ---
name age city
0 David 42 Boston
1 Eve 29 Miami
--- Reading specific query results ---
name city
0 David Boston
在这些示例中:
SQLAlchemy导入create_engine。engine对象。连接字符串('sqlite:///my_database.db')告诉SQLAlchemy如何连接(使用SQLite方言,连接到文件my_database.db)。对于其他数据库,如PostgreSQL或MySQL,字符串会看起来不同,并包含主机名、用户名、密码等。pd.read_sql_table('users', con=engine)将名为users的整个表读取到DataFrame中。pd.read_sql_query(query, con=engine)通过engine对数据库执行指定的SQL query,并将结果作为DataFrame返回。从SQL读取数据功能强大,因为它允许您使用数据库的查询能力,在将数据作为Pandas DataFrame加载到内存之前,对其进行筛选、聚合和选择,这对于大型数据集来说非常高效。请记住,设置数据库连接(engine)是一个先决条件,并取决于您正在使用的特定数据库系统。
Pandas也包含其他格式的功能,尽管可能不如CSV、Excel、JSON或SQL常用:
pd.read_html():直接从HTML网页读取表格。适用于网页抓取。pd.read_fwf():从固定宽度格式的行读取数据。pd.read_clipboard():从系统剪贴板读取文本并尝试将其解析为DataFrame(通常对于快速获取数据非常有用)。虽然我们这里侧重于JSON和SQL,但知道Pandas为许多数据类型提供了统一的接口(pd.read_...),使其成为数据加载的多功能工具。每个函数的具体参数因格式的特性而异。始终查阅Pandas文档以了解您打算使用的特定读取函数。
这部分内容有帮助吗?
orient参数处理不同结构。read_sql_table和read_sql_query。© 2026 ApX Machine Learning用心打造