1. 程式人生 > >pandas讀取首行資料(首行無列名),dataframe資料錶轉list陣列格式,dataframe轉置

pandas讀取首行資料(首行無列名),dataframe資料錶轉list陣列格式,dataframe轉置

程式碼:

    def delbycelllist(self, readfrom=None, sheet_name='Sheet1', cgilist=None, cellnamelist=None):
        if cgilist:
            for cgi in cgilist:
                self.delbycelladj(cgi=cgi)
        elif cellnamelist:
            for cellname in cellnamelist:
                self.delbycelladj(cellname=cellname)
        elif readfrom:
            # header=None 表示沒有列投,從第一行開始就是資料
            dfcgi = pd.read_excel(readfrom, sheet_name=sheet_name, header=None)
            # .stack()函式作用:轉置,列傳行
            nparr = np.array(dfcgi.stack())
            # .tolist()將np陣列轉為list陣列[]
            cgiarray = nparr.tolist()
            for cgi in cgiarray:
                self.delbycelladj(cgi=cgi)

註解:

        這個函式是class Checkpci的方法,其中有關pandas操作為:

1、dfcgi = pd.read_excel(readfrom, sheet_name=sheet_name, header=None)中,引數header = None表示沒有列頭,從頂頭第一行開始讀資料。解釋的連結:

2、下面兩行的作用是將DataFrame資料轉為list陣列,因為呼叫其他函式的時候,引數是list陣列格式的。

            # .stack()函式作用:轉置,列傳行
            nparr = np.array(dfcgi.stack())
            # .tolist()將np陣列轉為list陣列[]
            cgiarray = nparr.tolist()

解釋連結:

3、對於第二項還存在一個小插曲,因為輸入cgi在excel中是一列資料:

但是在pandas中的資料的組織格式是:整個資料表是一個二維陣列,每一行是大陣列中的一個小陣列,每行的每個單元格是小陣列中的每項。

 

dfexcel = pd.read_excel(r'C:\Users\Administrator\Desktop\嘉興工參\鄰區cgi.xlsx', sheet_name='Sheet1', header = None)

nparr = np.array(dfexcel)

 nparr.tolist()

結果:

[['460-00-413090-3'], ['460-00-413094-1'], ['460-00-413094-3'], ['460-00-413095-1'], ['460-00-413095-2'], ['460-00-413095-3'], ['460-00-413097-1'], ['460-00-413097-3'], ['460-00-413099-2'], ['460-00-413099-3'], ['460-00-413099-4'], ['460-00-413100-1'], ['460-00-413100-2'], ['460-00-413107-2'], ['460-00-413108-2'], ['460-00-413108-3'], ['460-00-413114-1'], ['460-00-413114-3'], ['460-00-413115-3'], ['460-00-413126-1'], ['460-00-413126-2'], ['460-00-413126-3'], ['460-00-413127-1'], ['460-00-413132-2'], ['460-00-413132-3'], ['460-00-413132-4'], ['460-00-413134-2'], ['460-00-413134-3'], ['460-00-413134-7'], ['460-00-413137-2'], ['460-00-413137-3'], ['460-00-413138-4'], ['460-00-413154-1'], ['460-00-413154-2'], ['460-00-413154-3'], ['460-00-413383-1'], ['460-00-413383-2'], ['460-00-413383-3'], ['460-00-413371-3'], ['460-00-413195-1'], ['460-00-325849-129'], ['460-00-413385-2'], ['460-00-413385-3'], ['460-00-413433-2'], ['460-00-413515-1'], ['460-00-413515-2'], ['460-00-413515-3'], ['460-00-413158-2'], ['460-00-413158-3'], ['460-00-746732-1'], ['460-00-763316-1'], ['460-00-763317-1'], ['460-00-763347-1'], ['460-00-325632-129'], ['460-00-325632-130'], ['460-00-325632-131'], ['460-00-325641-131'], ['460-00-325641-135'], ['460-00-325755-129'], ['460-00-325755-130'], ['460-00-325755-131'], ['460-00-325774-131'], ['460-00-614424-129'], ['460-00-614950-132'], ['460-00-614980-129'], ['460-00-614980-131'], ['460-00-763763-1'], ['460-00-326378-131'], ['460-00-326937-129'], ['460-00-413093-3'], ['460-00-413127-3'], ['460-00-413397-2'], ['460-00-326966-130'], ['460-00-326990-134'], ['460-00-615600-129']]

注意這個格式,在pandas的DataFrame資料表中,整個資料表是一個二維陣列,每一行是大陣列中的一個小陣列:

[[第一行第一列的資料,第一行第二列的資料,(1,3)位置資料, ...],  [第二行的所有列的資料], [第3行的所有列的資料],......]

如果資料都在excel的第一行:

得到的np陣列是這樣的:

 nparr.tolist():

[['460-00-413090-3', '460-00-413094-1', '460-00-413094-3', '460-00-413095-1', '460-00-413095-2', '460-00-413095-3', '460-00-413097-1', '460-00-413097-3', '460-00-413099-2', '460-00-413099-3', '460-00-413099-4', '460-00-413100-1', '460-00-413100-2', '460-00-413107-2', '460-00-413108-2', '460-00-413108-3', '460-00-413114-1', '460-00-413114-3', '460-00-413115-3', '460-00-413126-1']]

上面的陣列雖然還是二維陣列,但很接近我希望要的結果,只需取上面陣列的第0項就會得出一個一維陣列。

所以我需要對dfexcel 轉置,轉置函式為:dfexcel.stack()

dfexcel.stack()結果:

轉置後再轉為list:nparr = np.array(dfexcel.stack())

nparr.tolist():

['460-00-413090-3', '460-00-413094-1', '460-00-413094-3', '460-00-413095-1', '460-00-413095-2', '460-00-413095-3', '460-00-413097-1', '460-00-413097-3', '460-00-413099-2', '460-00-413099-3', '460-00-413099-4', '460-00-413100-1', '460-00-413100-2', '460-00-413107-2', '460-00-413108-2', '460-00-413108-3', '460-00-413114-1', '460-00-413114-3', '460-00-413115-3', '460-00-413126-1', '460-00-413126-2', '460-00-413126-3', '460-00-413127-1', '460-00-413132-2', '460-00-413132-3', '460-00-413132-4', '460-00-413134-2', '460-00-413134-3', '460-00-413134-7', '460-00-413137-2', '460-00-413137-3', '460-00-413138-4', '460-00-413154-1', '460-00-413154-2', '460-00-413154-3', '460-00-413383-1', '460-00-413383-2', '460-00-413383-3', '460-00-413371-3', '460-00-413195-1', '460-00-325849-129', '460-00-413385-2', '460-00-413385-3', '460-00-413433-2', '460-00-413515-1', '460-00-413515-2', '460-00-413515-3', '460-00-413158-2', '460-00-413158-3', '460-00-746732-1', '460-00-763316-1', '460-00-763317-1', '460-00-763347-1', '460-00-325632-129', '460-00-325632-130', '460-00-325632-131', '460-00-325641-131', '460-00-325641-135', '460-00-325755-129', '460-00-325755-130', '460-00-325755-131', '460-00-325774-131', '460-00-614424-129', '460-00-614950-132', '460-00-614980-129', '460-00-614980-131', '460-00-763763-1', '460-00-326378-131', '460-00-326937-129', '460-00-413093-3', '460-00-413127-3', '460-00-413397-2', '460-00-326966-130', '460-00-326990-134', '460-00-615600-129']

結果出乎意料,直接得到一維陣列了。這樣更方便了。