2.1 读取数据


文档摘要

2.1 读取数据 2.1 Pandas读取数据详解 2.1.1 从CSV文件读取数据 CSV(Comma Separated Values)是一种常见的文本文件格式,用于存储表格数据。Pandas的 函数可以方便地从CSV文件读取数据。 函数原型: 常用参数: : 文件路径或文件型对象。 : 分隔符,默认为逗号 。 : 分隔符的别名,与 作用相同。 : 指定哪一行作为列名。默认为 ,自动推断。可以指定行号(从0开始)或 (表示没有列名)。 : 列名列表。如果 ,则必须指定 。 : 指定哪一列作为索引列。可以指定列名或列号。 : 指定需要读取的列。可以指定列名列表或列号列表。 : 指定列的数据类型。可以指定字典,键为列名,值为数据类型。 : 跳过指定的行。可以指定行号列表或函数。

2.1 读取数据

2.1 Pandas读取数据详解

2.1.1 从CSV文件读取数据

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)
  • 指定缺失值:

NANULL识别为缺失值:

df = pd.read_csv('data.csv', na_values=['NA', 'NULL'])

2.1.2 从Excel文件读取数据

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')

2.1.3 从SQL数据库读取数据

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')

2.1.4 从JSON文件读取数据

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字符串:
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')

2.1.5 其他数据源

除了上述常用的数据源,Pandas还支持从其他数据源读取数据,例如:

  • HTML tables: read_html()

  • Clipboard: read_clipboard()

  • Pickle files: read_pickle()

  • SAS files: read_sas()

  • Stata files: read_stata()

2.1.6 数据读取流程图

下面是一个使用 Mermaid 绘制的数据读取流程图:

2.1.7 数据读取的注意事项

  • 编码问题: 读取文本文件时,需要注意文件的编码方式。如果编码方式不正确,可能会导致乱码。可以使用encoding参数指定编码方式。

  • 缺失值处理: Pandas会将一些特殊的值(如NaNNone)识别为缺失值。可以使用na_values参数指定哪些值被认为是缺失值。

  • 数据类型: Pandas会自动推断列的数据类型。可以使用dtype参数指定列的数据类型。

  • 内存占用: 读取大型文件时,需要注意内存占用。可以使用chunksize参数分块读取数据。

总结,Pandas提供了多种灵活的数据读取方法,可以方便地从各种数据源加载数据到DataFrame对象中。 掌握这些方法对于进行数据分析和处理至关重要。 通过合理使用这些函数和参数,可以高效地读取和处理各种类型的数据。


发布者: 作者: 转发
评论区 (0)
U