2012-05-10 85 views
1

我想从损坏的CSV文件导入数据。它包含科学数字,它是一个包含约30万行和27列的大数据集。当我使用它导入时,科学数据

Import["data.csv","HeaderLines"->1] 

数据格式是字符串。所以我将其更改为数据表格式

StringSplit[ToString[data[[#]]], ";"] & /@ 
Range[Dimensions[ 
    Import["data.csv"]][[1]]] 

我需要使用第一列来分析数据。但问题是这一行是 字符串类型的科学数字!我想将其更改为数字。我使用这个命令:

ToExpression[Internal`StringToDouble[fdata[[All, 1]][[#]]]] & /@ 
    Range[291407]; 

但是,它需要更多的时间这样做!你有什么想法,我可以做到这一点,而不浪费时间?

+1

欢迎来到StackExchange网络!对于未来的Mathematica相关问题,您可以考虑询问[Mathematica.SE](http://mathematica.stackexchange.com/)。与Mathematica相关的大部分活动都已移至此处。 – Szabolcs

+1

你可以发表几行CSV文件,所以我们可以看看它,并试图找出为什么导入速度很慢,为什么一切都被读为一个字符串?这不应该发生。 – Szabolcs

回答

1

你可以尝试以下方法:

(* read the first 5 rows *) 
d = ReadList["data.csv", Table[Number, {27}], 5] 


(* read the rows 100 to 150 *) 
s = OpenRead["data.csv"]; 
Skip[s, Record, 99] 
d = ReadList[s, Table[Number, {27}], 51] 
Close[s] 

而且d[[All,1]]会得到你的第一列。