PYTHON 類(lèi)定義與處理excel表

最近在用python處理中國(guó)家庭追蹤調(diào)查(cfps)的數(shù)據(jù),記錄一下過(guò)程。
首先對(duì)于多參數(shù)的行,定義一個(gè)類(lèi)去存儲(chǔ)是再好不過(guò)了。定義方法如下,首先要有一個(gè)
__init__(self,定義參數(shù)1,定義參數(shù)2,...)的構(gòu)造函數(shù)。之后你要定義一個(gè)類(lèi)就要輸入這些參數(shù)。
舉個(gè)例子:
class UP:
????def __init__(self,粉絲數(shù)量,稿件數(shù)量,性別,ID):
????????? ? self.sum_of_fans=粉絲數(shù)量;
????????????self.sum_of_articles=稿件數(shù)量;
????????????self.gender=性別;
????????????self.ID=ID;
#你還可以在類(lèi)里自己定義類(lèi)函數(shù),并直接引用自身的參數(shù)做變量。
????def print_UP(self):
????????????print(self.ID);
#定義完成
#下面開(kāi)始生成一個(gè)UP
gender=1;
ID="HDTT"
HDTT=UP(1,50,gender,ID);
#這樣一個(gè)UP主類(lèi)就定義完成了。
#你可以通過(guò)調(diào)用類(lèi)中的變量來(lái)查看UP主的信息
print(HDTT.ID);
#還可以調(diào)用內(nèi)置函數(shù)
HDTT.print_UP();
下面開(kāi)始正式工作:
#定義一個(gè)成人類(lèi)
class adult:
? ? def __init__(self,pid,code_a_p,fid16,provcd16,urban16,cfps_age,cfps_gender,pq1101,cfps2016eduy_im,cfps2016eduy,cfps2016edu):
? ? ? ? #個(gè)人ID 1
? ? ? ? self.pid=pid;
? ? ? ? #家庭內(nèi)碼 3
? ? ? ? self.code_a_p=code_a_p;
? ? ? ? #家庭碼
? ? ? ? self.fid16=fid16;
? ? ? ? #省份 13
? ? ? ? self.provcd16=provcd16;
? ? ? ? #城鄉(xiāng) 16
? ? ? ? self.urban16=urban16
? ? ? ? #年齡?
? ? ? ? self.cfps_age=cfps_age;
? ? ? ? #性別
? ? ? ? self.cfps_gender=cfps_gender;? ? ? ??
? ? ? ? #是否讀書(shū)
? ? ? ? self.pq1101=pq1101;
? ? ? ? #受教育年限
? ? ? ? self.cfps2016eduy_im=cfps2016eduy_im;
? ? ? ? #已完成教育年限
? ? ? ? self.cfps2016eduy=cfps2016eduy;
? ? ? ? #最高學(xué)歷
? ? ? ? self.cfps2016edu=cfps2016edu;
? ? ? ??
然后開(kāi)始處理excel
#write包
import xlwt
#read包
import xlrd
#打開(kāi)成人的數(shù)據(jù)
#這里地址前的r是取消轉(zhuǎn)義符號(hào),意思是引號(hào)內(nèi)的斜杠不是用來(lái)生成特殊符號(hào)的
#比如\n就是回車(chē)。加上r就按"\n"而不是回車(chē)輸出了。
data_adult=xlrd.open_workbook(r"C:\Users\16000\Desktop\cfps2016adult_201906_2.xlsx");
#以索引的方式打開(kāi)第一個(gè)sheet表
table_adult = data_adult.sheet_by_index(0);
#獲取第一行,也就是表頭的參數(shù)
parameter_list_adult=table_adult.row_values(0);
adult_list=[];
adult_ID_list=[];
#開(kāi)始讀入數(shù)據(jù),以excel行列索引的方式讀入數(shù)據(jù)
#這里可以把excel表改成數(shù)字顯示方式,方便查看

for i in range(1,table_adult.nrows):
? ? ? ? ? ? #個(gè)人ID 1
? ? pid=table_adult.cell(i,0).value;
? ? ? ? #家庭內(nèi)碼 2
? ? code_a_p=table_adult.cell(i,1).value;
? ? ? ? #家庭碼 3
? ? fid16=table_adult.cell(i,2).value;
? ? if fid16 in child_fmlID_list:
? ? ? ? adult_ID_list.append(pid);
? ? ? ? #省份 13
? ? ? ? provcd16=table_adult.cell(i,3).value;
? ? ? ? #城鄉(xiāng) 16
? ? ? ? urban16=table_adult.cell(i,4).value;
? ? ? ? #年齡?
? ? ? ? cfps_age=table_adult.cell(i,5).value;
? ? ? ? #性別
? ? ? ? cfps_gender=table_adult.cell(i,6).value;
? ? ? ? #是否讀書(shū)
? ? ? ? pq1101=table_adult.cell(i,7).value;
? ? ? ? #受教育年限
? ? ? ? cfps2016eduy_im=table_adult.cell(i,9).value;
? ? ? ? #已完成教育年限
? ? ? ? cfps2016eduy=table_adult.cell(i,10).value;
? ? ? ? #最高學(xué)歷
? ? ? ? cfps2016edu=table_adult.cell(i,8).value;
? ? ? ??
#最后由讀取的變量,定義類(lèi)? ? ? ? adult_per=adult(pid,code_a_p,fid16,provcd16,urban16,cfps_age,cfps_gender,pq1101,cfps2016eduy_im,cfps2016eduy,cfps2016edu);
#把類(lèi)存入列表。
? ? ? ? adult_list.append(adult_per);
#寫(xiě)入數(shù)據(jù)
f=xlwt.Workbook();
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True);
for i in range(1,len(adult_list)):
? ? sheet1.write(i,0,adult_list[i].fid16);
????sheet1.write(i,1,adult_list[i].provcd16);
f.save(r"C:\Users\16000\Desktop\result_family_8.xls");