尽管CSV和Excel文件在存储表格数据方面非常常用,但Pandas提供了从各种其他来源读取数据的灵活性,例如JSON文件和SQL数据库。读取JSON数据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 Chicagopd.read_json()有参数来处理不同的JSON结构。例如,如果您的JSON结构以键作为索引或列,您可能需要指定orient参数(例如,orient='index'、orient='columns'、orient='records')。默认的orient=None会尝试推断结构,这对于上面显示的常见记录列表格式通常运行良好。从SQL数据库读取数据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(通常对于快速获取数据非常有用)。存在用于HDF5、Parquet、Feather、Stata、SAS、SPSS文件等的功能,满足科学计算和其他特定方面的需求。虽然我们这里侧重于JSON和SQL,但知道Pandas为许多数据类型提供了统一的接口(pd.read_...),使其成为数据加载的多功能工具。每个函数的具体参数因格式的特性而异。始终查阅Pandas文档以了解您打算使用的特定读取函数。