目录
2023.12.5更新:
如果需要把很多数据导入excel,直接调用函数,每一行都要打开文件,写入excel文件,关闭文件,会导致运行非常缓慢,建议不要调用这个函数,而是把里边的代码拆出来,改成自己需要的格式。读取同理。
excel的速度不如to_pickle。
如果需要在excel中,对数据进行分析和处理,这种情况下,把数据存进去是合适的。
而且,如果excel还没有close,就终止运行代码,会导致这个excel的内容全部没掉,如果运行着运行着,发现不对劲,可以直接打开对应的excel文件。
-
以下是原文:
做机器学习,为了防止每一次从头开始跑,时间非常久,可以把中间的重要的数据先存下来,下次可以直接在这些数据的基础上跑,而不需要从头开始跑。
以下是几个方便转换的函数,可以直接用~
用到的几个库
import pandas as pd
from openpyxl import load_workbook
import numpy as np
把numpy数组导入excel
把numpy输出到excel某一行
注意:行序号、列序号都是从1开始
# 把numpy输出到excel某一行
# 注意:行序号、列序号都是从1开始
def numpy_to_excel_row(array,row,start_col,path):
book=load_workbook(path)
writer=pd.ExcelWriter(path,engine="openpyxl")
writer.book=book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
worksheet = writer.sheets['Sheet1']
for i in range(0,len(array)):
worksheet.cell(row=row, column=start_col+i, value=array[i])
writer.save()
把numpy输出到excel某一列
注意:行序号、列序号都是从1开始
# 把numpy输出到excel某一列
# 注意:行序号、列序号都是从1开始
def numpy_to_excel_col(array,start_row,col,path):
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine="openpyxl")
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
worksheet = writer.sheets['Sheet1']
for i in range(0, len(array)):
worksheet.cell(row=start_row+i, column=col, value=array[i])
writer.save()
导入excel,转成numpy
首先转成dataFrame格式
file_path="test.xlsx"
df=pd.read_excel(file_path)
读取某一行数据,存为numpy
注意:
- 行序号、列序号都是从0开始
- 如果数据中的nan全部集中在后几列,而且不需要把他们存进numpy,可以将reduce_nan置为True
- 如果要将nan也存入numpy,可以将reduce_nan置为False
# 读取某一行数据,存为numpy
# 注意:行序号、列序号都是从0开始
def excel_row_to_numpy(df,row,start_col,reduce_nan):
result=[]
shape=df.shape
largest_length=shape[1]
if reduce_nan:
nan_length = df.iloc[row, start_col: largest_length].isna().sum()
length=largest_length-nan_length-start_col
else:
length=largest_length
for i in range(start_col,start_col+length):
result.append(df.iloc[row,i])
result=np.array(result)
return result
读取某一列数据,存为numpy
注意:
- 行序号、列序号都是从0开始
- 如果数据中的nan全部集中在后几行,而且不需要把他们存进numpy,可以将reduce_nan置为True
- 如果要将nan也存入numpy,可以将reduce_nan置为False
# 读取某一列数据,存为numpy
# 注意:行序号、列序号都是从0开始
def excel_col_to_numpy(df,start_row,col,reduce_nan):
result=[]
shape=df.shape
largest_length=shape[0]
if reduce_nan:
nan_length=df.iloc[start_row:largest_length,col].isna().sum()
length=largest_length-nan_length-start_row
else:
length=largest_length
for i in range(start_row,start_row+length):
result.append(df.iloc[i,col])
result=np.array(result)
return result