[問題] 怎麼由 *.csv 自動建立陣列?[已解決]
安安大家好,小弟 python 新手。
因實驗緣故,我經常會有個 *.csv 檔,例如這個 gist 裡頭的
第二份檔案 APD23_BDlines.csv,
https://gist.github.com/3847082e32d93eeead73b3acb7fc1914.git
第一份檔案 APD23.py 是我讀取 *.csv 的方式。在這個 APD23_BDlines.csv
裡面有很多條曲線的 (x,y) 座標,大致如下
DopingConcentration(C1(n300_des_2)) X DopingConcentration(C1(n300_des_2)) Y
DopingConcentration(C1(n302_des)) X DopingConcentration(C1(n302_des)) Y
DopingConcentration(C1(n304_des)) X DopingConcentration(C1(n304_des)) Y
....
而我希望能夠寫個程式,將每條曲線的 (x,y) 座標分別存入兩個陣列。我的步驟是:
1. 判斷每條曲線有多少個數據點
2. 為每條曲線建立 array
3. 讀取數據,將數據存入 array
上述連結中的第一份程式碼 APD23.py 是我的實際作法。
這樣的步驟讓我很疲累,因為其實我的 *.csv 格式都是一樣的。
1. 第一橫列,都是我的資料名稱,並且以 x1, y1, x2, y2, ... 規則排列
2. 各直行的第二橫列底下,都是我的資料。
所以我希望能夠
1. 自動判斷有多少組 (x,y) 並建立相對應的陣列數目,自動命名陣列與設定陣列長度。
2. 自動將 *.csv 中的數據儲存至每個陣列中
我想了很久,都不知道怎麼做 QQ 有大大可以教我嗎 >< 因為我
想快速分析很多資料,但這樣人為建立陣列實在是太耗時了。
而如果自動命名與建立陣列,那我其實也不知道該怎麼寫這種
「尚未存在的陣列」的數據處理程式...因為我連名字都不知道 QQ
請各位大大幫忙一下 >< 感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.0.245
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1547625918.A.1BC.html
推
01/16 16:09,
6年前
, 1F
01/16 16:09, 1F
感謝大大,我現在就來搜尋 !!
大大,剛搜尋了一下,看不太懂這 eval 可以拿來做些什麼...Orz 我繼續研究研究
推
01/16 16:22,
6年前
, 2F
01/16 16:22, 2F
哦哦我查查看...
→
01/16 16:23,
6年前
, 3F
01/16 16:23, 3F
→
01/16 16:23,
6年前
, 4F
01/16 16:23, 4F
大大您的意思是說,我可以用 exec 來執行現在不存在的變數嗎?
所以 exec 並不是用來自動讀取 *.csv 並自動建立陣列的囉?
→
01/16 16:28,
6年前
, 5F
01/16 16:28, 5F
了解,這是我遇到的第一個有點難理解的東西 XD 需要花點時間來瞭解怎麼用了..
謝謝大大...
那想請問不曉得您對於「自動建立陣列」有什麼想法嗎?
感覺至少要先建立了陣列,才能使用 exec ?
→
01/16 20:48,
6年前
, 6F
01/16 20:48, 6F
大大您好,我之後會對曲線微分積分,而且會將每條曲線之間作四則運算或積分等。
但因為每個曲線的數據點不盡相同,所以我在進行曲線之間的運算之前,我會需要
先重整化每條曲線的數據,意思是說,讓他們有著相同的 x 座標。方法大概是
簡單的內插外插法。
仔細想下去感覺很難,因為我的 array 命名...
→
01/16 21:17,
6年前
, 7F
01/16 21:17, 7F
WOW 好簡潔整齊的 code ........ (羨慕佩服
我研究一下!十分感謝大大幫助啊!!!想了好久
※ 編輯: Philethan (123.192.0.245), 01/16/2019 21:20:43
→
01/16 21:20,
6年前
, 8F
01/16 21:20, 8F
→
01/16 21:22,
6年前
, 9F
01/16 21:22, 9F
→
01/16 21:22,
6年前
, 10F
01/16 21:22, 10F
→
01/16 21:23,
6年前
, 11F
01/16 21:23, 11F
→
01/16 21:24,
6年前
, 12F
01/16 21:24, 12F
大大您好,我執行原本的 APD23_BDlines.csv 時成功了!
但是如果換成別的 *.csv 檔就會出現 error
Traceback (most recent call last):
File "/Users/..../code_ptt.py", line 25, in <module>
result = parse_csv(csv_path)
File "/Users/..../code_ptt.py", line 11, in parse_csv
curve_name, x_y = fieldname.split(' ')
ValueError: too many values to unpack (expected 2)
Process finished with exit code 1
array 命名部分,如果能夠為指明是曲線A的x座標,曲線B的y座標,那就太好了QQ
我以前是這樣:
曲線A的x座標:xA = [xA1, xA2, xA3, ...., xA650]
曲線A的y座標:yA = [yA1, yA2, yA3, ...., yA650]
曲線B的x座標:xB = [xB1, xB2, xB3, ...., xB310]
曲線B的y座標:yB = [yB1, yB2, yB3, ...., yB310]
另外在同一份 *.csv 中,不同曲線的數據數目不同,所以會有 - 符號出現。
這時我希望可以讓 array 長度就停止在這,否則之後繪圖可能會有些問題><
非常感謝大大幫助!
→
01/16 21:29,
6年前
, 13F
01/16 21:29, 13F
→
01/16 21:30,
6年前
, 14F
01/16 21:30, 14F
→
01/16 21:31,
6年前
, 15F
01/16 21:31, 15F
→
01/16 21:32,
6年前
, 16F
01/16 21:32, 16F
大大我好像了解了,因為我另一個 *.csv 檔案的曲線名稱中有空格。
原則上是以 , 作為分割 :)
我查一下您說的 resplit,十分感謝您!
→
01/16 21:33,
6年前
, 17F
01/16 21:33, 17F
→
01/16 21:34,
6年前
, 18F
01/16 21:34, 18F
好的,非常感謝您,已經有非常多嘗試的方向!感謝大大!
→
01/16 21:35,
6年前
, 19F
01/16 21:35, 19F
哦!感謝大大,我以前是用網路上找到的
def isfloat(value):
try:
float(value)
return True
except ValueError:
return False
感謝很麻煩,還要一直用 if condition 判斷 True or False,我待會來
研究如何用 continue 處理 '-',感覺很簡便!我先研究一下怎麼依照逗點分割..
---
阿阿原來大大您早就在推文指出該怎麼改了,抱歉我資質太差,現在才看懂XD
感謝您 已經沒有 error 了!我可接著著手後面的array了^^
已完成拉!!謝謝樓上各位大大的協助!真的是非常感謝 :)
我的Code: https://paste.ofcode.org/EXMECLrxyeujHi8nsvppcB
→
01/16 23:35,
6年前
, 20F
01/16 23:35, 20F
小弟我只會這個...其實也是剛剛才學會的哈哈
不知道大大您有沒有其他建議 ><
※ 編輯: Philethan (123.192.0.245), 01/16/2019 23:36:52
→
01/17 00:00,
6年前
, 21F
01/17 00:00, 21F
→
01/17 00:00,
6年前
, 22F
01/17 00:00, 22F
→
01/17 00:01,
6年前
, 23F
01/17 00:01, 23F
→
01/17 00:01,
6年前
, 24F
01/17 00:01, 24F
→
01/17 00:02,
6年前
, 25F
01/17 00:02, 25F
哦哦 那如果不用 exec 製造 array,有辦法處理各曲線的微分、積分與互相的
四則運算嗎?原來有辦法用 for loop 畫圖哦@@感謝!我再來學學 XD
※ 編輯: Philethan (123.192.0.245), 01/17/2019 00:06:07
Python 近期熱門文章
PTT數位生活區 即時熱門文章