工作中的一些用python做的excel操作

@

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值