适用Excel和CSV文件的读写操作的封装
使用条件
- Python 3.x版本
- pandas
基于pandas常用方法的封装
读取列数据并生成列表
对pandas中DataFrame对象的列数据读取并生成Python列表方便后续处理是Python数据处理中经常需要重复的操作。为了提高效率,将此操作封装成一个函数如下:
def Columns_2_List(path, col):
"""读取Excel或CSV文件中的某列数据并生成列表"""
"""
@param(str, str):
path: 文件路径
col: 表格中的列的表头
@return(list):
表格中col关键词所对应的列组成的列表
"""
if ".xlsx" in path:
df = pd.read_excel(path)
elif ".csv" in path:
df = pd.read_csv(path)
else:
print("Please enter CSV or Excel file.")
return list(df[col])
读取行数据并生成列表
同样对DataFrame对象进行行数据的读取也是在数据处理中经常使用的操作,因此对此操作进行类似的封装:
def Rows_2_List(path, row):
"""读取Excel或CSV文件中的某行数据并生成列表"""
"""
@param(str, int):
path: 文件路径
row: 表格的行数
@return(list):
表格中row关键词所对应的行组成的列表
"""
if ".xlsx" in path:
df = pd.read_excel(path)
elif ".csv" in path:
df = pd.read_csv(path)
else:
print("Please enter CSV or Excel file.")
return list(df.loc[row])
设置行索引和列索引字典
在使用Python完成了数据处理之后,经常需要通过pandas.DataFrame()
方法来生成新的DataFrame对象,方便后续生成新的数据表格。
此函数接收行索引和列索引的数据,并生成字典,方便与下述生成Excel文件的函数配合使用。
def Set_Index_Dict(cols, rows=None):
"""设置行索引和列索引"""
'''
@param(iterable, iterable):
cols: 列索引
rows: 行索引
@return(dict):
返回行列索引字典
'''
dict_ = {
"cols": cols,
"rows": rows
}
return dict_
数据生成Excel文件
在完成数据处理,并设置好数据表格的行索引和列索引之后,为了方便,我们可能选择生成Excel表格,使用Excel表格进行更加方便和更加可视化的数据处理工作。此函数接收数据变量和行列索引的字典后生成Excel表格方便进一步数据处理。
def Data_2_Sheet(tup, path, index, method='cols'):
"""列表的内容转换并生成Excel文件"""
"""
@param(tuple, str, dict, str):
tup: 嵌套数据元组
e.g.
([col1], [col2])
([row1], [row2])
path: 需要输出的文件路径
index: 含列索引和行索引的字典
e.g.
index = {
'cols':(cols_index)
'rows':(rows_index)
}
method: 列表拼接的方式
'cols': 按列拼接
'rows': 按行拼接
@return: None
"""
if method == 'cols':
dict_ = dict(zip(index["cols"], tup))
df = pd.DataFrame(dict_, index=index["rows"])
# 行数据转换成列数据来处理
if method == 'rows':
cols = []
for i in range(len(tup[0])):
temp = []
for j in range(len(tup)):
temp.append(tup[j][i])
cols.append(temp)
dict_ = dict(zip(index["cols"], cols))
df = pd.DataFrame(dict_, index=index["rows"])
with pd.ExcelWriter(path) as writer:
df.to_excel(writer)