一、前言
作为一名运筹优化算法小白,在实习期间主要基于python语言开发一个自动化智能排程项目的算法,在开发定制化的元启发式算法过程中,数据预处理与清洗、数学模型的抽象化以及调用OR-tools求解器建模占了大头。而在使用pandas库处理数据过程中,一开始用的时候要么忘记对应的用法,要么理解错误某些方法和对象的底层运行逻辑,也是因为自己的不熟练,走了贼多弯路,写代码半小时,小问题debug代码花半天。最近算法部署上线稳定后,也想抽空来梳理梳理常用的pandas库用法以及遇到的小坑,希望看到的小伙伴能少走些弯路。
注:1)下文仅零散记录自己在编算法过程中用到的一些pandas库用法,若要系统的学习pandas库的使用语法,请自行查阅其他参考资料和相关书籍;2)本文的阅读需要读者熟悉python的基础语法,以及对numpy、series以及dataframe等数据类型有一定了解,没了解过的小伙伴可以先自行查阅资料学习相关的概念和定义声明方式。
二、数据读取与导出
在解决实际问题过程中,一个问题的相关信息大多可以整理成excel格式宽表信息,每一行代表某个需要决策的元素(如TSP问题中的一个客户点),每一列即该决策元素相关信息(如客户点坐标,需求等等)。而在编程建模前,往往就需要读取这些宽表信息,并将其中的信息抽象为数学模型的中的矩阵形式,进而开展建模编程,以下给出了python读取excel和导出excel的相关用法,其中hdf5是一类高维的数据存储格式,在此不作详细介绍,有兴趣的小伙伴可自行学习。
input_Data1 = pd.read_excel() # 从 Excel 文件中读取数据,括号中填写文件路径,只有文件名时,默认读取当前py文件所在路径中的指定文件,若不存在则会报错
input_Data2 = pd.read_hdf() # 从hdf格式的文件读取数据--需要引入第三方库 pip install tables,入参包括:1)hdf5文件所在路径,2)hdf5文件下存放具体数据的路径
output_Data.to_csv() # 将数据写入 CSV 文件,入参中填写文件路径,文件名称,没有文件路径时,默认导出到和当前py文件相同路径下的文件夹
output_Data.to_excel() # 将数据写入 Excel 文件--需要引入第三方依赖库:pip install openpyxl xlrd xlsxwriter
# 导出文件具体例子:将文件名为“test_data_improve”的dataframe数据对象导出到当前.py文件同目录下,导出的excel中,不展示每一行数据在dataframe中的行索引
test_data_improve.to_excel("test_data_improve.xlsx",index=False)
# 读取文件具体例子:从当前.py文件同目录下读取文件名为“temp_data4.xls”的excel文件,并定义为test_data
test_data = pd.read_excel('temp_data4.xlsx')
# 读取高维数据文件hdf5中某个路径下存放的excel文件
raw_data = pd.read_hdf(algo_data.store, algo_data.raw_data)
- to_excel() 的括号中通常传入2个参数,即:1)文件导出路径(包含文件名);2)index=True/False,其中index=True,代表导出的文件展示数据的行索引号,index=False代表不展示,即下面图片中红框框出来的第一列索引值。
- 默认导出路径为主程序py文件所在的目录,当需要修改导出文件的路径时,笔者习惯性地封装了如下的简单函数来方便dataframe对象的输出
def output_data(algo_path, data, file_name):
'''
将算法过程中的输出结果,默认存放到指定的临时文件夹中
:param algo_data: 路径
:param data: 导出数据
:param file_name: 导出的文件名
:return:
'''
store_path = os.path.join(algo_path, file_name)
data.to_excel(store_path, index=False)
- read_excel()默认读取当前py文件所在同目录下的文件,若文件不存在,则会报错,若需要读取不同目录下的文件,则需要在文件名前增加对应的路径,此时可以封装一个如下函数来读取某个路径下某个文件名的excel文件
def read_data(algo_path, file_name):
'''
读取指定路径下的excel文件,并返回dataframe
:param algo_path:文件所在的路径
:param file_name:文件名称
:return:
'''
store_path = os.path.join(algo_path, file_name) # 将路径和文件名相连,形成读取路径入参
df = pd.read_excel(store_path) # 读取对应路径下的对应文件
return df
Note:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- 1)执行带有to_excel()的程序时,在导出路径下,与导出对象同名称的.xlsx文件不能开着。
- 2)执行read_excel()函数时,对源文件不作修改的情况下,调试时打开文件不影响程序执行。
三、数据概要信息
将excel中的信息转化为dataframe数据结构后,