Mathematica - 导入CSV并处理列?

7

我有一个格式为CSV的文件,它的格式如下:

0.0023709,8.5752e-007,4.847e-008

我希望您能够将其导入Mathematica,然后将每一列分离成一个列表,以便我可以对所选列进行一些数学计算。
我知道我可以使用以下代码导入数据:
Import["data.csv"]

然后我可以用这个来分隔列:

StringSplit[data[[1, 1]], ","]

which gives:

{"0.0023709", "8.5752e-007", "4.847e-008"}

现在的问题是我不知道如何将数据分成单独的列表,而且Mathematica不接受科学计数法形式的8.5e-007。
如何将数据拆分为列并格式化科学计数法,任何帮助都将是非常好的。
提前致谢。

3
你使用的是哪个版本的 Mathematica?Mathematica 7 对我来说运行良好。同时尝试使用 Import["data.csv", "CSV"] - kennytm
4个回答

15

KennyTM是正确的。

data = Import["data.csv", "CSV"];
column1 = data[[All,1]]
column2 = data[[All,2]]
...

1
这是 Import[..., "CSV"] 的文档:http://reference.wolfram.com/mathematica/ref/format/CSV.html - Michael Pilat
注意,如果每个数据行都有额外的编号列,如:电视,广播,报纸,销售额,则此方法无法使用。 \n 1, 230.1,37.8,69.2,22.1\n 2, 44.5,39.3,45.1,10.4\n - Stepan Yakovenko

4

Davorak的回答是正确的,如果您需要将整个CSV文件导入为数组。但是,如果您有一个需要从C / Fortran样式指数表示法转换的单个字符串,则可以使用ImportString并为格式使用不同的参数。例如,有

In[1]:= ImportString["1.0e6", "List"]
Out[1]= {1.*^6}
*^ 运算符是 Mathematica 中的等价于 e 的运算符。需要注意的是,这也是将 CSV 格式字符串拆分的一种好方法:
In[2]:= ImportString["1.0e6,3.2,foo", "CSV"] 
Out[2]= {{1.*10^6,3.2,foo}}

在这两种情况下,你会得到一个额外的列表结构来封装答案,这很容易处理。但是,如果你确信只有一个数字或者只需要一个数字,你可以将字符串转换为流并使用Read。不过,由于这种方法相对繁琐,我建议仍然使用ImportString
In[3]:= Module[{stream = StringToStream["1.0e6"], number},
          number = Read[stream, "Number"];
          Close[stream];
          number]
Out[3]= 1.*10^6

3
你可以使用StringReplace[]来修正符号。
In[1]: aa = {"0.0023709", "8.5752e-007", "4.847e-008"};

In[2]: ToExpression[
          StringReplace[
             #,
             RegularExpression@"(^\d+\.\d+)e([+-]\d+)" -> "$1*10^$2"
          ]
       ] & @ aa

Out[2]: {0.0023709, 8.5752*10^-7, 4.847*10^-8}

你可以用一行代码将整个数据数组放在aa的位置上进行一次性处理。
{col1,col2,col3} = ToExpression[...] & @ Transpose[Import["data.csv", "CSV"]];

如上所述,使用ToExpression[...]


2
在MMA7中,我使用“elements”参数。事实上,如果不指定元素,我甚至不能导入.csv文件:
aa=Import["data.csv","Data"]
当您这样做时,所有字符串都会自动转换为表达式:Head/@Flatten@aa是{Real, Real, ....}。此外,“8.5752e-007”变成了8.5752*10^7,这是合法的MMA表达式。
导入的结果是一个1xn列表{{...}}。
因此,Transpose@aa给出了nx1列表{{.},{.}, .... }。
我认为这就是您想要的格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接