[問題] 讀取excel資料後如何換成陣列~

作者: explaining (小梁)   2022-08-18 13:36:20
小弟程式超級新手..第一次碰程式也是第一次碰python
問題很笨請見諒~~
有google過找不太到答案~~
我的目標是把Excel裡面的數據,用python取出來分析之後再存回去
取出來跟存回去有滿多的影片可以參考,
我也安裝了xlrd、openpyxl等等都可以用
但遇到一個小問題~就是取出來的資料如何變成普通的陣列來運算呢?
我把第一行的資料取出了,但他好像不是純數字,旁邊還附帶了欄位的編號
https://imgur.com/wxME0t5.jpg
導致程式不能做一般運算~
請問這是為什麼呢~該如何做處裡 或是要先去搞懂什麼基本觀念嗎~
感謝您了!
作者: chang1248w (彩棠)   2022-08-18 13:48:00
非excel不可嗎?我會把excel先匯出成csvpandas.read_csv之後在python上做處理,再df.to_csv另外csv檔excel是可以讀的
作者: explaining (小梁)   2022-08-18 14:18:00
CSV再轉EXCEL格式不會跑掉嗎? 還是感謝您的回覆我會試試看您的方法 不知道有沒有辦法直接對excel處理
作者: venomsoul (不怕太太)   2022-08-18 14:55:00
CSV檔嚴格說應該預設由notepad開啟,因為他只是字串,甚至沒有座標概念,但那樣就失去附檔命名為csv的意義了,所以一般有安裝excel的windows電腦都會直接用excel開啟csv,真要說格式可能跑掉應該是沒有,反而是excel如果有合併儲存格或有人在儲存格內換行,那轉成csv才會有問題,然後我沒用pandas但是好像本身就有read_excel(),何不試試看?
作者: chickengod (雞大俠)   2022-08-18 15:12:00
pandas.read_excel() 回傳值是 DataFrame 的資料型態要看得懂這個 object 的 function 才知道怎麼處理換句話說轉成 DataFrame 後你要使用 pandas 內建的function
作者: bjchiou (bjchiou)   2022-08-18 16:04:00
讀取用了usecols且只讀一欄,再從回傳形式來看,應該是pd 的Seriesnp.mean要求使用array-like,所以要將pd.Series轉成np.array第一個9應該也包含在內吧?那括號內還要加上header=None,整理一下,read_excel括號內要加header=None(若9要算)print(np.mean(np.array(file))),將pd.Series轉np.array熟練之後還可以串接read_excel(...).to_numpy(...)sorry~read_excel後的結果為dataframe、非series
作者: lycantrope (阿寬)   2022-08-18 18:06:00
問題出在資料沒有header吧 如果你資料沒有欄位名稱讀取時要加header = None
作者: explaining (小梁)   2022-08-18 18:38:00
好的我試試看! 感恩~~~!!
作者: lycantrope (阿寬)   2022-08-18 21:35:00
先學基本numpy跟pandas怎麼用,不用自己發明輪子
作者: bjchiou (bjchiou)   2022-08-18 21:58:00
拍謝~原po應該算被我誤導吧,file.mean()也能得到15.45但如此左邊有個0(df欄位名稱),且xls有多欄時會有新問題如樓上建議,學習基本的numpy及pandas平均值file[0].mean(),排序sorted(file[0].tolist())其實pandas也有自己的排序,file[0].sort_values()[0]指file第一欄(excel的A欄),未指定欄位名稱時,pandas會自動賦予名稱,而數字旁欄位編號稱為索引
作者: Mupzopod (pinballmachine)   2022-08-19 07:28:00
直接 file.values 就可以了pandas 本身就是建在numpy上的pandas.series 也可以直接 series.tolist()

Links booklink

Contact Us: admin [ a t ] ucptt.com