案例背景
真的很容易瘋....上班的單位的表格都是不同的人做的,所以就會出現(xiàn)各種合并單元格的情況,要知道我們用pandas讀取數(shù)據(jù)最怕合并單元格了,因為沒規(guī)律...可能前幾列沒合并,后面幾列又合并了....而且pandas對于索引很嚴(yán)格,這種合并單元讀取進來就是空的,還怎么查找數(shù)據(jù)......例如:
?還有這種:
?讀取的時候....真的很無語。雖然手工做的表頭方便人看,但真的不方便代碼來取數(shù)。
下面我們來看看怎么自動化讀取這種多合并表格的數(shù)據(jù),并規(guī)范表頭。就用這個資產(chǎn)的樣例
代碼實現(xiàn)
讀取數(shù)據(jù),前2行都是標(biāo)題沒用跳過,然后header=0,1表示2行作為多層索引。
name='資產(chǎn)類別統(tǒng)計表2023.7.xlsx'
df=pd.read_excel(f'{name}',skiprows=2,header=[0,1],converters={'類別編號': str})
df.head(3)
?
可以看到有‘unnamed’這種合并單元出現(xiàn)的空值的情況。?
我們可以打印查看一下行索引名稱:
df.columns
?像這種只有部分下面缺失的,可以直接用上面的第一層索引填充第二層索引,讓它還是兩層索引,然后繼續(xù)做多層索引數(shù)據(jù)框。
cols = df.columns.map(lambda x: [x[0]if 'Unnamed' in i else i for i in x])
multi_cols = pd.MultiIndex.from_arrays([list(col) for col in zip(*cols)])
df.columns=multi_cols
df.head(2)
?這樣就是處理好, 然后按照多層索引的方法去進行取數(shù)。
若多層索引不熟悉,只想變成正常 的二維數(shù)據(jù)框,那么就這樣:
cols = df.columns.map(lambda x: ''.join('' if 'Unnamed' in i else i for i in x))
cols
?把第一層和第二層的名稱都進行合并,然后賦值:
?
df.columns=cols
df.head(2)
?這樣就變成了單層數(shù)據(jù)框,完成!文章來源:http://www.zghlxwxcb.cn/news/detail-660412.html
后面就正常的pandas索引進行取數(shù)修改篩選計算等工作了。文章來源地址http://www.zghlxwxcb.cn/news/detail-660412.html
到了這里,關(guān)于pandas數(shù)據(jù)分析40——讀取 excel 合并單元格的表頭的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!