pandas数据预处理行数据复制
现有一张进货表格,数据如下,需要将商品数量与商品名称拆分,最终实现有多少个商品显示多少行数据。
即当商品为“鸡蛋*5”时,需要有5条鸡蛋数据。
1 2 3 4 | import pandas as pd import numpy as np file_path = r "E:临时数据预处理.xlsx" data = pd.read_excel(file_path) |
1 2 | #首先将不同商品做拆分,间隔符为"," data10 = data.join(data[ "商品" ]. str .split( "," ,expand = True )) |
拆分后的数据
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #不同商品拆分后第一次复制 data20 = data10[[ "日期" , 0 ]] data20.rename(columns = { 0 : "商品" },inplace = True ) data30 = data10[[ "日期" , 1 ]] data30.rename(columns = { 1 : "商品" },inplace = True ) data40 = data10[[ "日期" , 2 ]] data40.rename(columns = { 2 : "商品" },inplace = True ) data_con = pd.concat([data20,data30,data40]) data_con = data_con[data_con[ "商品" ].notna()] |
1 2 3 | #将商品名称与商品数量拆分 data_con.reset_index(drop = True ,inplace = True ) data_con = data_con.join(data_con[ "商品" ]. str .split( "*" ,expand = True )) |
拆分后的数据
如下:
1 2 | data_con.rename(columns = { 0 : "商品名称" , 1 : "商品数量" },inplace = True ) data_con[ "商品数量" ] = data_con[ "商品数量" ].astype( int ) |
1 2 3 4 5 6 | #商品名称与数量拆分后第二次复制 data_pro = pd.DataFrame() for i in range (data_con.shape[ 0 ]): data_temp = pd.DataFrame(np.repeat(pd.DataFrame(data_con.iloc[i]).T.values,data_con.iloc[i][ "商品数量" ],axis = 0 )) data_temp.columns = pd.DataFrame(data_con.iloc[i]).T.columns data_pro = pd.concat([data_pro,data_temp]) |
1 2 3 | data_pro = data_pro[[ '日期' , '商品名称' ]] data_pro[ "商品数量" ] = 1 |
最后将data_pro导出即可。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。