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[%]

結果是:

-53.5507 x+82686.3 log (x)+2.76608 cos (0.33 (x-1500.))-0.601287 cos (0.50 x)-524433.

畫在一起看看:

Plot[exp, Evaluate@{x, Sequence @@ MinMax[data[[All, 1]]]},
Frame -&> True, PlotStyle -&> {Red, Thick}, Epilog -&> Point[data]]

OK,這就是個初步的分析了。

對於這個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 | 數據處理 |