如果希望把excel 中的长数据’压扁‘显示,就可以使用df.melt()方法,实现的为逆透视的过程。
import pandas as pd
df = pd.ExcelFile(r'C:\Users\jackey\Desktop\FL/inventory_summary_202109262031.xlsx')
df_new = pd.DataFrame()
for name in df.sheet_names:
#获取每个Sheet的名称
df_pre = df.parse(sheet_name=name)
df_pre.rename(columns={'Unnamed: 0':'Lot'},inplace=True)
# print(df_pre.columns)
col=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
df_pre2=df_pre.melt(
id_vars='Lot',
value_vars=col,
var_name='Wafer ID',
value_name='数量',
)
df_pre2['品名']=name
df_pre2 = df_pre2[['品名', 'Lot', 'Wafer ID', '数量']]
df_pre2=df_pre2.convert_dtypes()
# print(df_pre2.dtypes)
df_pre2.sort_values(by=['Lot','Wafer ID'], ascending=[True,True],inplace=True)
df_new = df_new.append(df_pre2)
df_new.dropna(subset=['数量'],inplace=True)
df_new=df_new[df_new['数量']!=0]
df_new.reset_index(drop=True,inplace=True)
df_new.to_excel(r'C:\Users\jackey\Desktop\FL/inventory_summary_20210930.xlsx',sheet_name='inventory_summary')
语法结构
具体语法结构如下:
pd.melt(frame: pandas.core.frame.DataFrame,
id_vars=None, value_vars=None,
var_name='variable', value_name='value',
col_level=None)
其中:
- id_varstuple,list或ndarray(可选),用作标识变量的列。
- value_varstuple,列表或ndarray,可选,要取消透视的列。 如果未指定,则使用未设置为id_vars的所有列。
- var_namescalar,用于“变量”列的名称。 如果为None,则使用frame.columns.name或“variable”。
- value_namescalar,默认为“ value”,用于“ value”列的名称。
- col_levelint或str,可选,如果列是MultiIndex,则使用此级别来融化。