|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jojo9090 于 2023-10-11 16:21 编辑 import pandas as pd
import datetime as dt
# 以第二行为表头
inventory_2 = pd.read_excel(r'C:\Users\Administrator\Desktop\python\普通盘点管理2023101011.xlsx', usecols=lambda x: True,header=1)
# 删除盘点数量为0的行
inventory_2 = inventory_2[inventory_2['盘点数量'] != 0]
# 删除不需要的列并重新对列排序
inventory_2.drop(columns=['账簿', '盘点单号', '仓 库', '单据状态','结存数量', '明细条数', '录入员', '录入日期', '审核员', '审核日期'], inplace=True)
new_col_order=['产品编码', '产品名称', '规格型号', '颜色', '盘点数量', '盘号', '生产日期']
inventory_2=inventory_2[new_col_order]
# 插入单价金额列
inventory_2.insert(5, column='单价', value=pd.NA)
inventory_2.insert(6, column='金额', value=pd.NA)
# 筛选出物料编码以04.或05.开头的行
inventory_2 = inventory_2[inventory_2['产品编码'].str.startswith('04.') | inventory_2['产品编码'].str.startswith('05.')]
print(inventory_2.head())
# 创建今天的日期,提取月份
current_month = dt.datetime.now().month
print('这个月的月份是',current_month)
#(1)筛选4-6个月
# 4-6个月前的月份
period46 = [date for date in range(current_month-7,current_month-4)]
print(period46)
# 筛选出生产月份在period46的数据
inventory_2_46 = inventory_2[inventory_2['生产日期'].dt.month.isin(period46)]
inventory_2_46 = inventory_2_46[inventory_2['生产日期'].dt.year==2023]
# 筛选出来的数据按编码排序
inventory_2_46.sort_values(by='产品编码')
# (2)半年以上数据
# 算出半年时间点的月份
period6 = current_month-7
# 筛选出半年以上的行
inventory_2_6 = inventory_2[((inventory_2['生产日期'].dt.year == 2023) & (inventory_2['生产日期'].dt.month < period6) | (inventory_2['生产日期'].dt.year < 2023) & (inventory_2['生产日期'].dt.month < 13))]
# 筛选出来的数据按编码排序
inventory_2_6.sort_values(by='产品编码')
# 创建一个新的工作表并写入筛选出来的数据(4-6月和半年)
filtered_sheet = pd.ExcelWriter(r'C:\Users\Administrator\Desktop\python\普通盘点管理2023101011.xlsx', engine='openpyxl', mode='a')
inventory_2_46.to_excel(filtered_sheet, sheet_name='4-6', index=False)
inventory_2_6.to_excel(filtered_sheet, sheet_name='半年', index=False)
filtered_sheet._save()
运行后出现如下警告
D:\pythonProject\costing report\longterm overstock.py:38: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
inventory_2_46 = inventory_2_46[inventory_2['生产日期'].dt.year==2023]
本来没有警告,我添加了这一小段代码后,就出现警告了# 删除不需要的列并重新对列排序
inventory_2.drop(columns=['账簿', '盘点单号', '仓 库', '单据状态','结存数量', '明细条数', '录入员', '录入日期', '审核员', '审核日期'], inplace=True)
new_col_order=['产品编码', '产品名称', '规格型号', '颜色', '盘点数量', '盘号', '生产日期']
inventory_2=inventory_2[new_col_order]
# 插入单价金额列
inventory_2.insert(5, column='单价', value=pd.NA)
inventory_2.insert(6, column='金额', value=pd.NA)
哪里出错了?
警告的原因是因为在对一个DataFrame进行筛选时,使用了另一个DataFrame的列进行筛选,但两个DataFrame的索引不一样,导致警告。具体来说,这段代码中的inventory_2_46 = inventory_2_46[inventory_2['生产日期'].dt.year==2023],在对inventory_2_46进行筛选时,使用了inventory_2的生产日期列进行筛选,但两个DataFrame的索引不一样,因此会出现警告。解决方法是使用inventory_2_46的生产日期列进行筛选,即将代码修改为inventory_2_46 = inventory_2_46[inventory_2_46['生产日期'].dt.year==2023]。另外,代码中插入单价金额列的部分可以改为inventory_2[['单价', '金额']] = pd.NA,更加简洁。
|
|