作者explaining (EXP)
看板Python
標題[問題] 讀取excel資料後如何換成陣列~
時間Thu Aug 18 13:36:20 2022
小弟程式超級新手..第一次碰程式也是第一次碰python
問題很笨請見諒~~
有google過找不太到答案~~
我的目標是把Excel裡面的數據,用python取出來分析之後再存回去
取出來跟存回去有滿多的影片可以參考,
我也安裝了xlrd、openpyxl等等都可以用
但遇到一個小問題~就是取出來的資料如何變成普通的陣列來運算呢?
我把第一行的資料取出了,但他好像不是純數字,旁邊還附帶了欄位的編號
https://imgur.com/wxME0t5.jpg 導致程式不能做一般運算~
請問這是為什麼呢~該如何做處裡 或是要先去搞懂什麼基本觀念嗎~
感謝您了!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.110.53 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1660800983.A.143.html
→ chang1248w: 非excel不可嗎? 08/18 13:48
→ chang1248w: 我會把excel先匯出成csv 08/18 13:49
→ chang1248w: pandas.read_csv之後在python上做處理,再df.to_csv 08/18 13:50
→ chang1248w: 另外csv檔excel是可以讀的 08/18 13:50
→ explaining: CSV再轉EXCEL格式不會跑掉嗎? 還是感謝您的回覆 08/18 14:18
→ explaining: 我會試試看您的方法 不知道有沒有辦法直接對excel處理 08/18 14:21
推 venomsoul: CSV檔嚴格說應該預設由notepad開啟,因為他只是字串, 08/18 14:55
→ venomsoul: 甚至沒有座標概念,但那樣就失去附檔命名為csv的意義 08/18 14:55
→ venomsoul: 了,所以一般有安裝excel的windows電腦都會直接用exce 08/18 14:55
→ venomsoul: l開啟csv,真要說格式可能跑掉應該是沒有,反而是exce 08/18 14:55
→ venomsoul: l如果有合併儲存格或有人在儲存格內換行,那轉成csv才 08/18 14:55
→ venomsoul: 會有問題,然後我沒用pandas但是好像本身就有read_exc 08/18 14:55
→ venomsoul: el(),何不試試看? 08/18 14:55
有的 但read出來的資料無法直接處裡~
→ chickengod: pandas.read_excel() 回傳值是 DataFrame 的資料型態 08/18 15:12
→ chickengod: 要看得懂這個 object 的 function 才知道怎麼處理 08/18 15:12
→ chickengod: 換句話說轉成 DataFrame 後你要使用 pandas 內建的 08/18 15:12
→ chickengod: function 08/18 15:12
感謝三位大大的解說,特別是chick大~大致了解了,看來是資料格式的問題
我想接下來要查的關鍵字是 dataframe 轉換成list!
感謝!
※ 編輯: explaining (1.164.110.53 臺灣), 08/18/2022 15:23:08
→ bjchiou: 讀取用了usecols且只讀一欄,再從回傳形式來看,應該是 08/18 16:04
→ bjchiou: pd 的Series 08/18 16:04
→ bjchiou: np.mean要求使用array-like,所以要將pd.Series轉成np. 08/18 16:09
→ bjchiou: array 08/18 16:09
→ bjchiou: 第一個9應該也包含在內吧?那括號內還要加上header=None, 08/18 16:24
→ bjchiou: 整理一下,read_excel括號內要加header=None(若9要算) 08/18 16:28
→ bjchiou: print(np.mean(np.array(file))),將pd.Series轉np.array 08/18 16:29
→ bjchiou: 熟練之後還可以串接read_excel(...).to_numpy(...) 08/18 16:31
→ bjchiou: sorry~read_excel後的結果為dataframe、非series 08/18 16:40
推 lycantrope: 問題出在資料沒有header吧 如果你資料沒有欄位名稱 08/18 18:06
→ lycantrope: 讀取時要加header = None 08/18 18:07
→ explaining: 好的我試試看! 感恩~~~!! 08/18 18:38
謝謝各位的指教,我用np.array & tolist() 成功轉成了ndarray和list就可以運算了~!
https://imgur.com/Uc1gM8V.jpg 現在在找方法把右邊每個數字煩人的描述去掉~
thanks a lot!
※ 編輯: explaining (1.164.110.53 臺灣), 08/18/2022 21:23:41
推 lycantrope: 先學基本numpy跟pandas怎麼用,不用自己發明輪子 08/18 21:35
→ bjchiou: 拍謝~原po應該算被我誤導吧,file.mean()也能得到15.45 08/18 21:58
→ bjchiou: 但如此左邊有個0(df欄位名稱),且xls有多欄時會有新問題 08/18 22:03
→ bjchiou: 如樓上建議,學習基本的numpy及pandas 08/18 22:05
→ bjchiou: 平均值file[0].mean(),排序sorted(file[0].tolist()) 08/18 22:09
→ bjchiou: 其實pandas也有自己的排序,file[0].sort_values() 08/18 22:25
→ bjchiou: [0]指file第一欄(excel的A欄),未指定欄位名稱時,pandas 08/18 22:49
→ bjchiou: 會自動賦予名稱,而數字旁欄位編號稱為索引 08/18 22:52
推 Mupzopod: 直接 file.values 就可以了 08/19 07:28
→ Mupzopod: pandas 本身就是建在numpy上的 08/19 07:28
→ Mupzopod: pandas.series 也可以直接 series.tolist() 08/19 07:30