Mathematica如何導入某個csv或者excel文件的指定行和列?
如果csv或者txt或者excel文件中開始有一些參數說明,後面才是數據,導入到mma中時需要指定一些行和列的數據,如果比如說想導入E23:F700這部分的兩列數據形成表,然後繪圖,如何操作呢?
目前我的方法是手動複製這些數據到某個excel中,然後再用mma讀取,但是如果多了就很麻煩,因此詢問有沒有更直接的辦法,謝謝!
簡單說就是先用 Import(比如Import["~/myfile.csv", "Data"])導入數據,然後再對結果用 Part ([[...]]) 抽取需要的行列。
寫在前面:
看到題主糾結這個問題好幾天了,始終不得其解,拉一把。本來心想這種"極其簡單"的問題都讓我有衝動來舉報「代為完成的個人任務」,但想到當年開始編程時,確實是導入數據非常非常困擾人,實在是開展研究第一步的「攔路虎」。所以這個答案里會多說幾句,有關數據存儲、處理等。$$$$$$$$$$$$$$$$$$$$$$$$ here we go $$$$$$$$$$$$$$$$$$$$$$$$
答案極其簡單:
data = Import["A0005.csv", "Data"][[204 ;; 1000, 5 ;; 6]];
就是這麼一句話,需要的數據就導入了。
以上[[]]就是全稱為Part的函數操作,用於slice一個對象(不限於List,試試看Pi[[0]]是啥)。$$$$$$$$$$$$$$$$$$$$$$$$ OK, have a beer now $$$$$$$$$$$$$$$$$$$$$$$$
然後題主的這個數據還有點意思,我們再來看看它:ListPlot[data, Frame -&> True]
exp = FindFormula[data, x];
TraditionalForm[%]
結果是:
Plot[exp, Evaluate@{x, Sequence @@ MinMax[data[[All, 1]]]},
Frame -&> True, PlotStyle -&> {Red, Thick}, Epilog -&> Point[data]]
對於這個csv文件,個人覺得存儲的設計不大好,metadata和原始數據放在一起,確實不"舒服",這也大概造成了題主關於"很多逗號"的困惑。所以,建議是metadata與data分開存放,以便後續處理。
當然,如果這個文件是某種另外的程序生成的,那就另當別論。但是回過頭來再說題主導入數據的這個問題:
1)知乎上的朋友已經指明了道路,但題主還是被糾結,究竟是哪一步擋住了題主繼續往下探索?2)除了問知乎,題主該怎麼嘗試去解決這個問題?(看數據,題主大概是一枚某種信號的研究僧?,所以建議題主能先思考下這些問題。方便的話,題主也可以把探索的過程分享出來,這樣我覺得這個問題才會更有意義。)另外,儘管用Import解決了這個問題,但是如果是大量數據,Import的效率是低於ReadList這類較"底層"的函數的。所以,思考了以上兩個問題後,建議題主能自己探索下ReadList對於這個問題的解決方案。其實樓上的答主都沒有說到點子上,今天糾結這個的時候發現了SemanticImport 這個函數,可以指定列名的key,但是行名的key如何指定我也沒找到
類似Pandas的read_csv里有個column指定的功能,這個確實方便。
Import導入再取子集比較佔用內存,當然通常文件較大咱也不大用這玩意了。有個方法是Read讀的時候,對於一些指定模式的數據才讀取,比如只讀數字等,當然因為是按行讀的話,邊讀邊取部分內容,稍寫一下函數,還是能做些輸入時的優化的。通常在1個G的數據量以下都不太必要,有個8G內存,ReadList可以全部讀入搞搞。data = Import["A0005.csv", "Data"][[204 ;; 1000, 5 ;; 6]]; 這句代碼中[204 ;; 1000, 5 ;; 6]]里 [204 ;; 1000, 5 ;; 6]怎麼解釋 謝謝!
推薦閱讀:
※如何看待工科生因為現在數學軟體太強了,進而對數學不重視的觀念?
※R語言繪圖相比其他軟體主要是強在哪裡?
※Mathematica 里如何查看函數內部代碼?
※如何用最簡單的代碼說明Mathematica裡面的各個水平層次?
※為什麼mathematica的語法和lisp很近?
TAG:WolframMathematica | 數據處理 |