Pandas 库读取数据
Pandas 是一种开源数据分析工具,可以帮助我们更方便地处理和分析数据。Pandas 提供了许多函数来读取各种格式的数据,例如 CSV、Excel、SQL 等。
读取 CSV 文件
CSV 文件是一种常用的数据格式,其中每行表示一条记录,每列表示一个字段。我们可以使用 Pandas 库中的 read_csv 函数来读取 CSV 文件。下面是一个基本的用法示例:
import pandas as pd
df = pd.read_csv('file.csv')
在上面的示例中,我们使用 read_csv 函数读取一个名为 file.csv 的 CSV 文件,并将其保存到名为 df 的 DataFrame 对象中。默认情况下,Pandas 将第一行视为列名,并使用逗号作为字段间的分隔符。
有时候,CSV 文件的第一行可能不是列名,或者使用的分隔符不是逗号。在这种情况下,我们需要显式地指定相关参数。例如,如果 CSV 文件使用空格作为字段间的分隔符,并且第一行不是列名,那么可以使用如下的方式读取文件:
df = pd.read_csv('file.csv', sep=' ', header=None)
在上面的示例中,我们将分隔符参数 sep 设置为空格,将 header 参数设置为 None,表示该文件没有列名。
除了上述两个常见的参数之外,Pandas 的 read_csv 函数还提供了许多其他可选参数:
- sep: 指定分隔符,默认为逗号
- header: 指定哪一行作为列名,默认为'infer',即自动推断,也可以传入整数或列表来指定具体的行号,或者传入None来表示没有列名
- names: 指定列名,如果传入了列表,则会覆盖header参数的效果,如果传入了None,则会自动生成列名
- index_col: 指定哪一列作为行索引,默认为None,即自动生成索引,也可以传入整数或列表来指定具体的列号,或者传入字符串来指定具体的列名
- usecols: 指定要使用哪些列,默认为None,即使用所有列,也可以传入整数或列表来指定具体的列号,或者传入字符串或列表来指定具体的列名,或者传入可调用对象来根据列名筛选
- dtype: 指定每一列的数据类型,默认为None,即自动推断,也可以传入字典来映射每一列的类型,例如{‘a’: int, ‘b’: float}
- skiprows: 指定要跳过哪些行,默认为None,即不跳过任何行,也可以传入整数或列表来指定具体的行号,或者传入可调用对象来根据行号筛选
- nrows: 指定要读取多少行,默认为None,即读取所有行,也可以传入整数来指定具体的行数
- na_values: 指定要识别为缺失值的值,默认为None,即只识别空白值,也可以传入字符串或列表来指定具体的值,例如'NA'或['NA', '-']
- parse_dates: 指定是否要解析日期,默认为False,即不解析日期,也可以传入True来尝试解析所有列,或者传入整数或列表来指定具体的列号,或者传入字符串或列表来指定具体的列名,或者传入字典来映射每
读取 Excel 文件
Pandas 库还可以读取 Excel 文件。可以使用 Pandas 中的 read_excel 函数,例如:
df = pd.read_excel('file.xlsx', sheet_name='Sheet1')
在上面的示例中,我们使用 read_excel 函数读取一个名为 file.xlsx 的 Excel 文件,并将第一个工作表(Sheet1)中的数据保存到一个 DataFrame 对象中。
和 read_csv 函数一样,read_excel 函数也提供了许多可选参数:
- sheet_name: 指定要读取哪个工作表,默认为0,即第一个工作表,也可以传入整数或字符串来指定具体的工作表号或名称,或者传入None来读取所有工作表,或者传入列表来读取多个工作表
- header: 指定哪一行作为列名,默认为'infer',即自动推断,也可以传入整数或列表来指定具体的行号,或者传入None来表示没有列名
- names: 指定列名,如果传入了列表,则会覆盖header参数的效果,如果传入了None,则会自动生成列名
- index_col: 指定哪一列作为行索引,默认为None,即自动生成索引,也可以传入整数或列表来指定具体的列号,或者传入字符串来指定具体的列名
- usecols: 指定要使用哪些列,默认为None,即使用所有列,也可以传入整数或列表来指定具体的列号,或者传入字符串或列表来指定具体的列名,或者传入可调用对象来根据列名筛选
- dtype: 指定每一列的数据类型,默认为None,即自动推断,也可以传入字典来映射每一列的类型,例如{‘a’: int, ‘b’: float}
- skiprows: 指定要跳过哪些行,默认为None,即不跳过任何行,也可以传入整数或列表来指定具体的行号,或者传入可调用对象来根据行号筛选
- nrows: 指定要读取多少行,默认为None,即读取所有行,也可以传入整数来指定具体的行数
- na_values: 指定要识别为缺失值的值,默认为None,即只识别空白值,也可以传入字符串或列表来指定具体的值,例如'NA'或['NA', '-']
- parse_dates: 指定是否要解析日期,默认为False,即不解析日期,也可以传入True来尝试解析所有列,或者传入整数或列表来指定具体的列号,或者传入字符串或列表来指定具体的列名,或者传入字典来映射每一列是否要解析日期
读取 SQL 数据库
Pandas 还可以从基于 SQL 数据库中读取数据,以便进行更复杂的查询和数据分析。Pandas 提供了一个 read_sql 函数来连接和查询 SQL 数据库。例如:
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('sqlite:///file.db')
df = pd.read_sql('SELECT * FROM table', engine)
在上面的示例中,我们使用 SQLAlchemy 包中的 create_engine 函数创建了一个连接到 SQLite 数据库的 Engine 对象,然后使用 Pandas 的 read_sql 函数从表 table 中选择所有行('*')。
注意,sqlite:///file.db
中的 file.db
是我们要连接的 SQLite 数据库文件名。如果是其他类型的数据库,需要使用相应的连接字符串。在这里,我们还需要安装 SQLAlchemy 包,该包提供了一些 SQL 数据库引擎的接口和工具。
read_sql()函数的用法如下:
pd.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
其中,sql参数是一个SQL语句或者一个表名,用来指定要读取的数据源。con参数是一个数据库连接对象,用来指定要连接的数据库。其他参数是一些可选的参数,用来自定义读取的方式,例如:
- index_col: 指定哪一列作为行索引
- coerce_float: 指定是否要将数值类型的数据强制转换为浮点类型
- params: 指定一些参数来替换SQL语句中的占位符
- parse_dates: 指定是否要解析日期
- columns: 指定要返回哪些列
- chunksize: 指定要分块读取的行数
除了CSV、Excel和SQL文件外,pandas还支持读取其他类型的文件,例如:
- read_json(): 读取JSON文件
- read_html(): 读取HTML文件中的表格
- read_parquet(): 读取Parquet文件
- read_feather(): 读取Feather文件
- read_hdf(): 读取HDF5文件
- read_stata(): 读取Stata文件
- read_sas(): 读取SAS文件
- read_spss(): 读取SPSS文件
- read_pickle(): 读取Pickle文件
这些函数的用法和参数与read_csv()和read_excel()类似,但也有一些特定的参数,例如:
- read_json()可以指定orient参数来表示JSON数据的结构,例如'split'表示分割索引、列名和数据,'records'表示每一行是一个JSON对象,'index'表示行索引是JSON的键,等等
- read_html()可以指定match参数来根据正则表达式匹配HTML中的表格,例如match='Population'表示只选取包含'Population'字符串的表格
- read_sql()可以指定sql参数来传入SQL语句或表名,例如sql='SELECT * FROM table'表示执行SQL查询并返回结果,sql='table'表示直接返回表格内容
- read_parquet()可以指定engine参数来选择使用哪个库来读取Parquet文件,例如engine='pyarrow'表示使用pyarrow库,engine='fastparquet'表示使用fastparquet库
- read_feather()可以指定columns参数来选择要读取哪些列,例如columns=['a', 'b']表示只读取'a'和'b'两列
写入数据
除了读取数据之外,Pandas 也提供了许多函数来写入数据到各种格式,例如 to_csv、to_excel、to_sql 等。这些函数通常按照与读取数据函数类似的方式使用。例如,要将 DataFrame 对象保存为 CSV 文件,可以使用 to_csv 函数:
df.to_csv('new_file.csv', index=False)
在上面的示例中,我们使用 to_csv 函数将名为 df 的 DataFrame 对象保存为一个名为 new_file.csv 的 CSV 文件。我们还将 index 参数设置为 False,表示不保存行索引。
常见错误和注意事项
- 文件路径不正确:读取或写入文件时,必须指定正确的文件路径。如果文件路径不正确,会导致文件读取或写入失败。
- 编码不正确:在读取或写入 CSV 文件时,可能需要指定正确的编码方式。如果编码不正确,可能会导致读取或写入的数据出现乱码等问题。
- 参数不正确:读取或写入数据时,必须指定正确的参数。例如,在读取 CSV 文件时,必须指定分隔符、列名等参数,如果参数不正确,数据可能无法正确读取。
- 规范化数据:在读取数据之前,必须确保数据规范化。例如,在读取 Excel 文件时,必须确保各个工作表中的数据结构一致,否则可能会出现数据读取错误的问题。
总结
pandas是一个强大而灵活的Python包,它可以让你处理带有标签和时间序列的数据。pandas提供了一系列的函数来读取不同类型的文件,并返回一个DataFrame对象,这是pandas的核心数据结构,它可以让你方便地对数据进行分析和处理。
pandas读取文件的函数通常有以下几个特点:
- 函数名以read_开头,后面跟着文件的类型,例如read_csv()表示读取CSV文件
- 函数的第一个参数是文件的路径或者类似文件的对象,例如read_csv("data.csv")表示读取data.csv文件,read_csv(url)表示从网址读取数据
- 函数有很多可选的参数来自定义读取的方式,例如sep表示分隔符,header表示列名,index_col表示行索引,dtype表示数据类型等等
- 函数返回一个DataFrame对象,它是一个二维的表格,可以用行索引和列名来访问数据,也可以用一些方法和属性来对数据进行操作