【问题标题】:Mathematica - Import CSV and process columns?Mathematica - 导入 CSV 和处理列?
【发布时间】:2010-03-26 17:26:15
【问题描述】:

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

0.0023709,8.5752e-007,4.847e-008

我想将它导入 Mathematica,然后将每一列分成一个列表,这样我就可以对选定的列进行一些数学运算。

我知道我可以通过以下方式导入数据:

Import["data.csv"]

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

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

给出:

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

现在的问题是我不知道如何将数据放入单独的列表中,而且 Mathematica 也不接受 8.5e-007 形式的科学记数法。

任何关于如何将数据分成列和格式化科学记数法的帮助都会很棒。

提前致谢。

【问题讨论】:

  • 您使用的是哪个版本的 Mathematica? Mathematica 7 对我来说很好用。也尝试使用Import["data.csv", "CSV"]

标签: csv wolfram-mathematica


【解决方案1】:

KennyTM 是正确的。

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

【讨论】:

【解决方案2】:

Davorak's answer 是正确的,如果您需要将整个 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[...] 同上。

    【讨论】:

      【解决方案4】:

      在 MMA7 中,我使用“元素”参数。事实上,如果不指定元素,我什至无法导入 .csv 文件:

      aa=导入["data.csv","Data"]

      执行此操作时,所有字符串都会自动转换为表达式:Head/@Flatten@aa is {Real, Real, ....}。此外,“8.5752e-007”变为 8.5752*10^7,这是一个合法的 MMA 表达式。

      导入的结果是一个 1xn 列表 {{ ... }}。

      因此,Transpose@aa 给出了 nx1 列表 {{.},{.}, .... }。

      我认为这是您想要的格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多