- 问题描述: 因项目需求,我使用concat拼接数据存入mysql中缺少某一些列的,代码运行不抱任何的错误,唯一就是缺少列.
- 问题原因: 字段名重复
- 解决思路:具体想法因项目而定,这里做的是循环 第一次运行和第二次运行,也可if判断
1. concat函数参数介绍:
axis :默认为0,为按行拼接;1 为按列拼接
ignore_index: 默认为False,会根据索引进行拼接;True 则会忽略原有索引,重建新索引
join: 为拼接方式,包括 inner,outer
sort: True 表示按索引排序
def count_1(self):
df2 = pd.Dataframe()
field_ = ['Fwdtaccess', 'Freplenishaccess'] # 2-74剔除77否 2-74剔除79否
# df1 = pd.Dataframe()
for i in range(2):
if i == 0:
T1_sql = 'SELECt b.FNumber, b.FName, SUM( CASE WHEN c.Fwarehouseshortname = "广州" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_广州", SUM( CASE WHEN c.Fwarehouseshortname = "武汉" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_武汉", SUM( CASE WHEN c.Fwarehouseshortname = "青鸟" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_青鸟", SUM( CASE WHEN c.Fwarehouseshortname = "唯品JITX" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_唯品JITX", SUM( CASE WHEN c.Fwarehouseshortname = "广州" THEN a.transfers_transit ELSE 0 END ) "调拨在途_全仓_广州", SUM( CASE WHEN c.Fwarehouseshortname = "武汉" THEN a.transfers_transit ELSE 0 END ) "调拨在途_全仓_武汉", SUM( CASE WHEN c.Fwarehouseshortname = "青鸟" THEN a.transfers_transit ELSE 0 END ) "调拨在途_全仓_青鸟" FROM wp_wdt_inventory_update AS a INNER JOIN wp_kingdee_bd_material AS b ON a.spec_no = b.FNumber and b.Fvirtualmaterial = "否" INNER JOIN wp_kingdee_bd_stock AS c ON a.warehouse_name = c.FName and c.{}!="否" where (c.Fwarehouseshortname="广州" or c.Fwarehouseshortname="武汉" or c.Fwarehouseshortname="青鸟" or c.Fwarehouseshortname="唯品JITX") GROUP BY b.FNumber,b.FName'.format(
field_[0])
df = pd.read_sql(T1_sql, con=self.conn)
else:
T1_sql = 'SELECT b.FNumber, b.FName, SUM( CASE WHEN c.Fwarehouseshortname = "广州" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_广州2", SUM( CASE WHEN c.Fwarehouseshortname = "武汉" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_武汉2", SUM( CASE WHEN c.Fwarehouseshortname = "青鸟" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_青鸟2", SUM( CASE WHEN c.Fwarehouseshortname = "唯品JITX" THEN a.send_inventory ELSE 0 END ) "可发库存_全仓_唯品JITX2", SUM( CASE WHEN c.Fwarehouseshortname = "广州" THEN a.transfers_transit ELSE 0 END ) "调拨在途_全仓_广州2", SUM( CASE WHEN c.Fwarehouseshortname = "武汉" THEN a.transfers_transit ELSE 0 END ) "调拨在途_全仓_武汉2", SUM( CASE WHEN c.Fwarehouseshortname = "青鸟" THEN a.transfers_transit ELSE 0 END ) "调拨在途_全仓_青鸟2" FROM wp_wdt_inventory_update AS a INNER JOIN wp_kingdee_bd_material AS b ON a.spec_no = b.FNumber and b.Fvirtualmaterial = "否" INNER JOIN wp_kingdee_bd_stock AS c ON a.warehouse_name = c.FName and c.{}!="否" where (c.Fwarehouseshortname="广州" or c.Fwarehouseshortname="武汉" or c.Fwarehouseshortname="青鸟" or c.Fwarehouseshortname="唯品JITX") GROUP BY b.FNumber,b.FName'.format(
field_[1])
df = pd.read_sql(T1_sql, con=self.conn)
df2 = pd.concat([df2, df], axis=1)
# aa = df.groupby(["FNumber", "Fwarehouseshortname"])[["send_inventory", "transfers_transit"]].sum()
print(df2.info())
print(df2.shape)
df2.to_sql("com_count", self.engine, if_exists='append') # replace替换,append新增 顾名思义这里不多解释