import pandas as pd
#加载pandas包
#假设df1有唯一主键'id','Nbr'和'sku'也可以对应唯一值
df1 = pd.read_excel('文件路径',sheet_name = '表格名',use_columns = '读取指定列,提高后续效率',
skip_rows = 1, #跳过读取的行数,一般用作跳过表头的备注
dtype = {'列名':float} #指定列的数值类型)
#df2为df1的补充数据,唯一主键为id,'Nbr'和'sku'也可以对应唯一值
df2 = pd.read_excel('文件路径',sheet_name = '表格名',use_columns = '读取指定列,提高后续效率',
skip_rows = 1, #跳过读取的行数,一般用作跳过表头的备注
dtype = {'列名':float})
#对根据df1中的指定列,对比df2中的指定列的值,并拼接剩余的数据
#类似excel中xlookup的功能
df_xlookup = pd.merge(df1,df2,on='A',how = 'left')
#how = 有三个参数,‘left’查找失败时保留左侧的值,‘right’保留右侧值,‘inner’只保留匹配成功的序列
#相当于excel中=xlookup('df1中A列的单元格','df2中的A列','返回df2中的剩余列',0,0)
'''
若定期更新的excel文件中的格式不变,列名变化,如9月传入的数据,列名为'A','B','C',
而10月的列名为'D','E','F',此时可根据列序数的列名读取工作表中的指定列
'''
update_col = df1.columns #读取df1中所有的列名,并返回list
df1[update_col[1]] #读取列序数为2的列
#增加新的列
df1.insert(loc=12,#插入第13列,column = '列名',value = '预设值')
#修改新添加的列中的数据类型
df1.[['新增加的列名']] = df1[['新增加的列名']].astype(int)
#修改新添加的列的列名
df1 = df1.rename(column = {'原来的列名','新列名'})
#筛选指定列中的指定值
df1 = df1[df1['列名']=='条件值'] #法1,根据单个值匹配
df1 = df1[df1[].isin(list)] #法2,根据list中的值进行匹配
#将df中的指定列转换为list对象
list = df1['列名'].tolist()
#遍历dataframe中的每一行,比较两列的值,并将比较结果输出在另一列
for index,row in df1.iterrows():
if df1.at[index,'A'] > df1.at[index,'B']:
o_p3m.at[index,'比较结果'] = '大'
else:
o_p3m.at[index,'比较结果'] = '等于或小于'
#dataframe写入excel
columns_to_write = ['A']
df_to_write = o_p3m[columns_to_write] #指定写入列
inventory_management = load_workbook('写入表.xlsx') #读取写入表
sheet1 = inventory_management['Sheet1'] #选择表sheet1
startrow = sheet1.max_row + 1 if sheet1.max_row > 0 else 1 #计算数据的起始行为已有数据的下一行
for row in df_to_write.itertuples(index=False, name=None):
sheet1[f"A{startrow}"] = row[0] #A{startrow}为写入A列,row[0]为指定写入列中的第一列数据
startrow += 1 #写入数据
inventory_management.save('库存周转计算表.xlsx')
pandas高频使用语句——从excel出发
最新推荐文章于 2024-09-25 11:09:10 发布