@
excel运用
路径拼接
import os
Path=os.path.join(filePath,filename)
读取excel改变读取字段格式
import pandas as pd
#全部是str
df1=pd.read_excel(io=Path,sheet_name=0,header=0,dtypes=“str”)
#所选字段为str
df2=pd.read_excel(io=Path,sheet_name=0,header=0,dtypes={“订单编号”:str})
强制转换,可多个
df3=pd.read_excel(io=Path,sheet_name=0,header=0,converters={“新编码”: str,“旧编码”: str})
给一列拼接字符串
df3[“新编码”]=["’"+i for i in df3[“新编码”]]
选取需要的几列
cols=[“新编码”,“旧编码”,“未来编码”]
df4=pd.DataFrame(df3,columns=cols)
重命名列名
df4=df4.rename(columns={“新编码”,“编码2”})
向后添加
df5=df3.append(df2)
新建列
df1[“m”]=""
for item in df2.columns:
if item =="支付类型":
pass
else:
df1["item"] ==""
重点删除一行后必须要重置索引
df=df.drop(index=0)
df2=df.reset_index(drop=True)
#取前几行 会遇到前几行是各种描述,3,4行后才是你的数据,但是你的客户又要这些数据
处理办法拼接
df_title=df.head(3)
利用writer写入
import openpyxl
#写入已有表的新sheet里 用writer不会覆盖的
wb =openpyxl.load_workbook(path1)
writer=pd.ExcelWriter(path1,engine=“openpyxl”)
writer.book=wb
df.to_excel(writer,index=False,header=None,sheet_name=“编码”)
df2.to_excel(writer,startrow=3,index=0,header=1,sheet_name=“编码”)
#header=None 无标题
#startrow=3从第三行开始
writer.save()
writer.close()
这样就完成了拼接
用writer写表格 可能出现无标题这时候
添加入准备好的excel表格
wb = openpyxl.load_workbook(path1)
writer = pd.ExcelWriter(path1, engine=“openpyxl”)
writer.book = wb
df3.to_excel(writer, index=0, header=1, sheet_name=“编码”)
writer.save()
writer.close()
没错header=0 要变成header=1 才会有标题
#处理某些字段的nan
df=df.dropna(subset=[“物料编码”])
#去除整个nan
df.replace("'nan"," ",inplace=True)
字段条件选取
#选取单据状态为已审核,关闭状态等于正常,剩余未出数量不为空的数据
df=df.loc[(df[“单据状态”]“审核”) & ( df[“关闭状态”]“正常”)&(df[“剩余未出数量”]!="")]
iloc 是根据索引选取
for i in range(df.shape[0]):
row=df.iloc[i]
#左边索引从0开始
删除不要的列
df.drop(labels=“支付类型”,axis=1,inplace=True)
axis=0(行)
关于日期生成
import datetime
#当前时间
new_day=datetime.datetime.now()
转换为常见的格式
day1=new_day.strftime("%Y%M%D")
字符串切割
string1 =day1.split("/")[0] /年
string2 =day1.split("/")[1] /月
string3 =day1.split("/")[2] /日
可自由拼接
少几天
string4=str(int(string3)-3)即可
注意10一下前面要加0 自己加一个if判断
把445454这种excel打出的日期转换成正确格式
def date(dates):
delta =datetime.timedelta(days=dates)
today =datetime.datetime.striptime("1899-12-30", '%Y-%m-%d')+delta
return datetime.datetime.strftime(today,'%Y%m%d')
根据编号汇总计算剩余数量
转换为int类型
df[“剩余数量”]=df[“剩余数量”].fillna(0).astype(“int”)
df=df.groupby(by=[“编码”])[“剩余数量”].sum()
#这时候得到的是一个序列 你要想加入进你的excel就要转成dataframe
df=df.to_frame()
重置索引
df[“编码”]=df.index
df=df.reset_index(drop=True)
这时候你就得到了一列 dataframe
写入表格 一处之前所写过的sheet表 重新写入
wb=openpxyl.load_workbook(Path1)
writer=pd.ExcelWriter(Path1,engine=“openpyxl”)
writer.book=wb
idx=wb.sheetnames.index(sheet1_name)
wb.remove(wb.worksheets[idx])
df.to_excel(writer,index=0,header=1,sheet_name=sheet1_name)
writer.save()
writer.close()