事情是這樣的,元旦前有朋友向我尋求幫助,吐槽老闆在放假前給他安排一個苦逼的差事,想問問我能不能幫個忙,要不然假期都過不好了
工作具體內容如下,主要是想把一個二維表格轉成一維表格,如下圖(表格為替代品):
於是我馬上想到了pandas,想著這麼強大的函數肯定有這個功能,於是我開始翻閱資料,沒想到還真找到了,而且僅用三行代碼就搞定了,驚的朋友直呼python牛批
下面個大家詳細介紹一下整個過程
1.正確讀取表格首先按照傳統的方式讀表格:
import pandas as pd
data1 = pd.read_excel('高中生數量.xlsx')
data1
發現索引列沒有被識別,產生了Unnamed: 0列,所以我們應該把第一列設置為索引列,代碼如下:
import pandas as pd
data1 = pd.read_excel('高中生數量.xlsx',index_col=0) #index_col用來設置索引列
data1
這樣就正常讀取並識別表格了
2.重置索引這一步主要是將索引列重置,變為普通列,便於下步,代碼如下
data2=data1.reset_index()
data2
可以發現,之前的索引列編程『index』列了
3.將列名轉換為列數據這一步主要用到pandas的melt函數,melt是逆轉操作函數,可以將列名轉換為列數據(columns name → column values),重構DataFrame,用法如下:
pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
參數解釋:
frame:要處理的數據集;id_vars:不需要被轉換的列名;value_vars:需要轉換的列名,如果剩下的列全部都要轉換,就不用寫了;var_name和value_name是自定義設置對應的列名;col_level :如果列是MultiIndex,則使用此級別。我們把'index'列保留,並把轉換後的列命名為'year',value命名為'stu_num':
data3=data2.melt(id_vars='index', var_name='year',value_name='stu_num')
data3
4.把第一列設置為索引列為了防止保存後的表格帶有數字索引,需要把第一列設置為索引列:
data4=data3.set_index('index')
data4
5.保存表格data4.to_excel('轉換後表格.xlsx')大功告成,上述代碼可以用1行代碼搞定:
data=data.reset_index().melt('index', var_name='col').set_index('index')是不是很強悍!
一起感受一下妹子的誇讚吧:
幸福就是這麼簡單,在這裡哥想說一句,不是哥優秀,而是python太強大,哈哈!
我是東哥,最後給大家分享《100本Python電子書》,包括Python編程技巧、數據分析、爬蟲、Web開發、機器學習、深度學習。
現在免費分享出來,有需要的讀者可以下載學習,在下面的公眾號「GitHuboy」裡回復關鍵字:Python,就行。