2.1 读取数据 2.1 Pandas读取数据详解 2.1.1 从CSV文件读取数据 CSV(Comma Separated Values)是一种常见的文本文件格式,用于存储表格数据。Pandas的 函数可以方便地从CSV文件读取数据。 函数原型: 常用参数: : 文件路径或文件型对象。 : 分隔符,默认为逗号 。 : 分隔符的别名,与 作用相同。 : 指定哪一行作为列名。默认为 ,自动推断。可以指定行号(从0开始)或 (表示没有列名)。 : 列名列表。如果 ,则必须指定 。 : 指定哪一列作为索引列。可以指定列名或列号。 : 指定需要读取的列。可以指定列名列表或列号列表。 : 指定列的数据类型。可以指定字典,键为列名,值为数据类型。 : 跳过指定的行。可以指定行号列表或函数。
CSV(Comma Separated Values)是一种常见的文本文件格式,用于存储表格数据。Pandas的read_csv()函数可以方便地从CSV文件读取数据。
函数原型:
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, dtype=None, converters=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, encoding_errors='strict', dialect=None, error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options=None)
常用参数:
filepath_or_buffer: 文件路径或文件型对象。
sep: 分隔符,默认为逗号,。
delimiter: 分隔符的别名,与sep作用相同。
header: 指定哪一行作为列名。默认为'infer',自动推断。可以指定行号(从0开始)或None(表示没有列名)。
names: 列名列表。如果header=None,则必须指定names。
index_col: 指定哪一列作为索引列。可以指定列名或列号。
usecols: 指定需要读取的列。可以指定列名列表或列号列表。
dtype: 指定列的数据类型。可以指定字典,键为列名,值为数据类型。
skiprows: 跳过指定的行。可以指定行号列表或函数。
nrows: 读取指定的行数。
na_values: 指定哪些值被认为是缺失值。
encoding: 指定文件的编码方式。常见的编码方式有'utf-8'、'gbk'等。
代码示例:
假设有一个名为data.csv的文件,内容如下:
Name,Age,City Alice,25,New York Bob,30,London Charlie,28,Paris
读取该CSV文件的代码如下:
import pandas as pd df = pd.read_csv('data.csv') print(df)
输出:
Name Age City 0 Alice 25 New York 1 Bob 30 London 2 Charlie 28 Paris
更多示例:
如果CSV文件使用分号;作为分隔符,可以这样读取:
df = pd.read_csv('data.csv', sep=';')
如果CSV文件没有列名,可以这样指定:
df = pd.read_csv('data.csv', header=None, names=['Name', 'Age', 'City'])
将Name列作为索引列:
df = pd.read_csv('data.csv', index_col='Name')
df = pd.read_csv('data.csv', skiprows=2)
df = pd.read_csv('data.csv', nrows=2)
将NA和NULL识别为缺失值:
df = pd.read_csv('data.csv', na_values=['NA', 'NULL'])
Pandas的read_excel()函数可以从Excel文件(.xls或.xlsx)读取数据。
函数原型:
pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, dtype=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False, date_parser=None, dayfirst=False, date_precision=None, thousands=None, decimal='.', comment=None, skipfooter=0, convert_float=True, mangle_dupe_cols=True, storage_options=None)
常用参数:
io: 文件路径或文件型对象。
sheet_name: 指定要读取的工作表。可以指定工作表名称或索引(从0开始)。默认为0,即第一个工作表。
header: 指定哪一行作为列名。默认为0,即第一行。
names: 列名列表。
index_col: 指定哪一列作为索引列。
usecols: 指定需要读取的列。
dtype: 指定列的数据类型。
skiprows: 跳过指定的行。
nrows: 读取指定的行数。
na_values: 指定哪些值被认为是缺失值。
代码示例:
假设有一个名为data.xlsx的Excel文件,包含一个名为Sheet1的工作表,内容如下:
| Name | Age | City |
|---|---|---|
| Alice | 25 | New York |
| Bob | 30 | London |
| Charlie | 28 | Paris |
读取该Excel文件的代码如下:
import pandas as pd df = pd.read_excel('data.xlsx', sheet_name='Sheet1') print(df)
输出:
Name Age City 0 Alice 25 New York 1 Bob 30 London 2 Charlie 28 Paris
更多示例:
df = pd.read_excel('data.xlsx', sheet_name=1)
df = pd.read_excel('data.xlsx', sheet_name='Sheet1', index_col='Name')
Pandas的read_sql()函数可以从SQL数据库读取数据。需要先建立数据库连接。
函数原型:
pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None, converters=None, dtype=None, dtype_backend=NoDefault.no_default, engine_kwargs=None)
常用参数:
sql: SQL查询语句。
con: 数据库连接对象。
index_col: 指定哪一列作为索引列。
coerce_float: 将数字字符串转换为浮点数。
params: SQL查询语句的参数。
代码示例:
首先,需要安装sqlalchemy和数据库驱动程序(例如,psycopg2 for PostgreSQL,pymysql for MySQL)。
# 使用 SQLAlchemy 创建一个示例 SQLite 数据库 from sqlalchemy import create_engine, text import pandas as pd # 创建一个 SQLite 数据库引擎 engine = create_engine('sqlite:///:memory:') # 创建一个示例表 with engine.connect() as conn: conn.execute(text(""" CREATE TABLE employees ( id INTEGER PRIMARY KEY, name VARCHAR(255), age INTEGER, city VARCHAR(255) ) """)) # 插入一些示例数据 conn.execute(text(""" INSERT INTO employees (name, age, city) VALUES ('Alice', 25, 'New York'), ('Bob', 30, 'London'), ('Charlie', 28, 'Paris') """)) conn.commit() # 使用 pandas 读取数据 df = pd.read_sql_query("SELECT * FROM employees", engine) print(df)
输出:
id name age city 0 1 Alice 25 New York 1 2 Bob 30 London 2 3 Charlie 28 Paris
更多示例:
df = pd.read_sql_query("SELECT * FROM employees", engine, index_col='id')
Pandas的read_json()函数可以从JSON文件或JSON字符串读取数据。
函数原型:
pandas.read_json(path_or_buf=None, orient=None, typ='frame', dtype=None, convert_axes=None, convert_dates=True, keep_default_dates=True, numpy=False, precise_float=False, date_unit=None, encoding=None, encoding_errors='strict', lines=False, chunksize=None, compression='infer', storage_options=None)
常用参数:
path_or_buf: 文件路径或JSON字符串。
orient: 指定JSON的结构。常见的取值有'split'、'records'、'index'、'columns'、'values'。
typ: 指定返回的数据类型。可以为'frame'(DataFrame)或'series'(Series)。
lines: 如果为True,则按行读取JSON数据。
代码示例:
假设有一个名为data.json的文件,内容如下:
[ {"Name": "Alice", "Age": 25, "City": "New York"}, {"Name": "Bob", "Age": 30, "City": "London"}, {"Name": "Charlie", "Age": 28, "City": "Paris"} ]
读取该JSON文件的代码如下:
import pandas as pd df = pd.read_json('data.json') print(df)
输出:
Name Age City 0 Alice 25 New York 1 Bob 30 London 2 Charlie 28 Paris
更多示例:
json_str = '[{"Name": "Alice", "Age": 25, "City": "New York"}, {"Name": "Bob", "Age": 30, "City": "London"}]' df = pd.read_json(json_str)
orient参数:如果JSON数据的结构不同,可能需要指定orient参数。例如,如果JSON数据如下:
{ "Name": ["Alice", "Bob", "Charlie"], "Age": [25, 30, 28], "City": ["New York", "London", "Paris"] }
则需要指定orient='index':
df = pd.read_json('data.json', orient='index')
除了上述常用的数据源,Pandas还支持从其他数据源读取数据,例如:
HTML tables: read_html()
Clipboard: read_clipboard()
Pickle files: read_pickle()
SAS files: read_sas()
Stata files: read_stata()
下面是一个使用 Mermaid 绘制的数据读取流程图:
编码问题: 读取文本文件时,需要注意文件的编码方式。如果编码方式不正确,可能会导致乱码。可以使用encoding参数指定编码方式。
缺失值处理: Pandas会将一些特殊的值(如NaN、None)识别为缺失值。可以使用na_values参数指定哪些值被认为是缺失值。
数据类型: Pandas会自动推断列的数据类型。可以使用dtype参数指定列的数据类型。
内存占用: 读取大型文件时,需要注意内存占用。可以使用chunksize参数分块读取数据。
总结,Pandas提供了多种灵活的数据读取方法,可以方便地从各种数据源加载数据到DataFrame对象中。 掌握这些方法对于进行数据分析和处理至关重要。 通过合理使用这些函数和参数,可以高效地读取和处理各种类型的数据。