目录
csv数据
1.文本文件读取
示例代码:
2. 文本文件存储
示例代码:
Excel文件数据
1. Excel文件读取
示例代码:
2. Excel文件存储
数据库数据
1. 数据库数据读取
示例代码:
2. 数据库存储
示例代码:
数据的读取是进行数据预处理、数据建模和分析的基础。
对于不同的数据文件,pandas提供了不同函数进行读取。
pandas内置了10余种读写函数。
常见的数据文件格式有3种形式,分别是CSV文件、Excel文件和数据库。
pandas提供了read_csv函数来读取csv文件。
pandas.read_csv(filepath_or_buffer, sep='\t', header='infer', names=None, index_col=None, dtype=None, engine=None, nrows=None)
# 代码2-1
# 使用read_csv读取销售流水记录表
import pandas as pd
data1 = pd.read_csv('../data/销售流水记录1.csv', encoding='gb18030')
print('使用read_csv读取的销售流水记录表的长度为:', len(data1))
# 代码2-2
# 使用read_csv读取销售流水记录表, header=None
data2 = pd.read_csv('../data/销售流水记录2.csv', header=None, encoding='gb18030')
print('使用read_csv读取的销售流水记录表的长度为:', len(data2))
print('列名为None时订单信息表为:')
data2.iloc[0:5,0:4]
# 使用utf-8解析销售流水记录表
data3 = pd.read_csv('../data/销售流水记录2.csv', header=None, encoding='utf-8')
文本文件的存储和读取类似,结构化数据可以通过pandas中的to_csv函数实现以csv文件格式存储文件。
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', columns=None, header=True, index=True, index_label=None, mode='w', encoding=None)
# 代码2-3
import os
print('销售流水记录表写入文本文件前目录内文件列表为:\n', os.listdir('../tmp'))
data1.to_csv('../tmp/SaleInfo.csv', sep=';', index=False) # 将data1以CSV格式存储
print('销售流水记录表表写入文本文件后目录内文件列表为:\n', os.listdir('../tmp'))
pandas提供了read_excel函数来读取“xls”“xlsx”两种Excel文件。
pandas.read_excel(io, sheetname=0, header=0, index_col=None, names=None, dtype=None)
# 代码2-4
data3 = pd.read_excel('../data/折扣信息表.xlsx') # 读取折扣信息表的数据
print('data3信息长度为:', len(data3))
将文件存储为Excel文件,可以使用to_excel方法。其语法格式如下。
DataFrame.to_excel(excel_writer=None, sheetname=None, na_rep='', header=True, index=True, index_label=None, mode='w', encoding=None)
to_excel函数和to_csv函数的常用参数基本一致,区别之处在于指定存储文件的文件路径参数名称为excel_writer,并且没有sep参数。
此外,还增加了一个sheetnames参数,用于指定存储的Excel Sheet的名称,默认为sheet1。
# 代码2-5
print('data3写入Excel文件前目录内文件列表为:\n', os.listdir('../tmp'))
data3.to_excel('../tmp/data_save.xlsx')
print('data3写入Excel文件后目录内文件列表为:\n', os.listdir('../tmp'))
pandas提供了读取与存储关系型数据库数据的函数与方法。除了pandas库外,还需要使用SQLAlchemy库建立对应的数据库连接。SQLAlchemy配合相应数据库的Python连接工具,使用create_engine函数,建立一个数据库连接。
creat_engine中填入的是一个连接字符串。在使用Python的SQLAlchemy时,MySQL和Oracle数据库连接字符串的格式如下:
数据库产品名+连接工具名://用户名:密码@数据库IP地址:数据库端口号/数据库名称?charset = 数据库 数据编码
read_sql_table只能够读取数据库的某一个表格,不能实现查询的操作。
pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, columns=None)
read_sql_query则只能实现查询操作,不能直接读取数据库中的某个表。
pandas.read_sql_query(sql, con, index_col=None, coerce_float=True)
read_sql是两者的综合,既能够读取数据库中的某一个表,也能够实现查询操作。
pandas.read_sql(sql, con, index_col=None, coerce_float=True, columns=None).
# 代码2-6
import pandas as pd
import sqlalchemy
# 创建一个mysql连接器,用户名为root,密码为123456
# 地址为127.0.0.1,数据库名称为test
sqlalchemy_db = sqlalchemy.create_engine(
'mysql+pymysql://root:[email protected]:3306/test')
print(sqlalchemy_db)
# 代码2-7
import pandas as pd
# 使用read_sql_query函数查看test中的数据表数目
formlist = pd.read_sql_query('show tables', con=sqlalchemy_db)
print('testdb数据库数据表清单为:', '\n', formlist)
# 使用read_sql_table函数读取销售流水记录表sale2
detail1 = pd.read_sql_table('sale2', con=sqlalchemy_db)
print('使用read_sql_table读取销售流水记录表的长度为:', len(detail1))
# 使用read_sql函数读取销售流水记录表
detail2 = pd.read_sql('select * from sale2', con=sqlalchemy_db)
print('使用read_sql函数 + sql语句读取销售流水记录表的长度为:', len(detail2))
detail3 = pd.read_sql('sale2', con=sqlalchemy_db)
print('使用read_sql函数+表格名称读取的销售流水记录表的长度为:', len(detail3))
将DataFrame数据写入数据库中,同样也要依赖SQLAlchemy的数据库连接。数据库数据读取有3个函数,但数据存储则只有一个to_sql()方法。
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, dtype=None)
# 代码2-8
# 使用to_sql方法存储orderData
detail1.to_sql('sale_copy', con=sqlalchemy_db, index=False, if_exists='replace')
# 使用read_sql读取test表格
formlist1 = pd.read_sql_query('show tables', con=sqlalchemy_db)
print('新增一个表格后test数据库数据表清单为:', '\n', formlist1)