file_tb = pd.read_excel(remote_file="test.xlsx",
sheet_name=0,
engine="openpyxl",
header=1
)
##查看行或列是否有空格(以下的df为Dataframe类型,axis=0,代表列,axis=1代表行,以下的返回值都是行或列索引加上布尔值)
df_list = file_tb.isnull().all(axis=1)
##获取都为空格的行的序号
if not df_list.any():
print('不需要操作')
indexList = []
else:
indexList = file_tb[df_list].index
print(indexList)
##按获取到的序号进行切割
ndf_list = np.array_split(file_tb, indexList)
##按照指定字符串来确定数据块
index_flag = "Sam's DI"
##是否不选取第一行
drop_index_flag = 1
dff = pd.DataFrame()
##获取准确的df
for ndf in ndf_list:
##将有空字符串替换为NaN
ndf.replace(to_replace=r'^\s*$', value=np.nan, regex=True, inplace=True)
##清空所有行都为空值的行和列
df = ndf.dropna(axis=0, how="all")
df = df.dropna(axis=1, how="all")
##重置序号
df.reset_index(drop=True, inplace=True)
print(df)
##获取第一行的列表
dlist = df.head(1).values.tolist()
dlist = dlist[0] if dlist else []
if index_flag in dlist:
dff = df
if drop_index_flag:dff = df[1:]
break
if len(dff)==0:dff=ndf_list[0]
##df变为以第一行作为列名
def change_df(df):
arr = df.values
new_df = pd.DataFrame(arr[1:, :], columns=arr[0, :])
##重置序号
new_df.reset_index(drop=True, inplace=True)
return new_df
dff = change_df(dff)