2010-03-26 5 views
4

내가 좋아하는 포맷 된 CSV 파일이 있습니다Mathematica - CSV 가져 오기 및 컬럼 처리?

0.0023709,8.5752e-007,4.847e-008 

을하고 그래서 내가 선택한 열의 일부 수학을 할 수있는 목록으로 분리 각 열을 티카로 가져올하고 싶은.

Import["data.csv"] 

그때 나는이에 열을 분리 할 수 ​​있습니다 :

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

주는 :

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

문제는 지금

는 내가 가진 데이터를 가져올 수있어 데이터를 개별 목록으로 가져 오는 방법을 알지 못하고 Mathematica는 과학적 표기법을 받아들이지 않습니다. e 형 8.5e-007.

데이터를 열로 나누고 과학 표기법을 형식화하는 방법에 도움이 될 것입니다.

미리 감사드립니다.

+3

사용중인 Mathematica 버전은 무엇입니까? Mathematica 7은 잘 작동합니다. 또한 Import [ "data.csv", "CSV"]'를 사용해보십시오. – kennytm

답변

12

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 –

+0

각 데이터 행에는 TV, 라디오, 신문, 영업과 같은 추가 번호 매기기 열이 있습니다. \ 1,230.1,37.8,69.2,22.1 \ n 2,44.5,39.3,45.1,10.4 \ n –

2

StringReplace[]을 사용하여 표기법을 수정할 수 있습니다.

In[1]: aa = {"0.0023709", "8.5752e-007", "4.847e-008"}; 

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

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

넌 한 라이너와 상기 ToExpression[...]

{col1,col2,col3} = ToExpression[...] & @ Transpose[Import["data.csv", "CSV"]]; 

로 한번에 처리로 단 대신에, 전체 데이터 배열을 넣을 수있다.

2

Davorak's answer은 전체 CSV 파일을 배열로 가져와야하는 경우에 적합합니다. 그러나 C/Fortran 스타일의 지수 표기법에서 변환해야하는 단일 문자열이있는 경우 형식에 대해 다른 인수를 사용하여 ImportString을 사용할 수 있습니다. 예로서,

In[1]:= ImportString["1.0e6", "List"] 
Out[1]= {1.*^6} 

*^ 조작자가 e의 매쓰의 상당있다.

두 경우 모두
In[2]:= ImportString["1.0e6,3.2,foo", "CSV"] 
Out[2]= {{1.*10^6,3.2,foo}} 

, 당신은 당신의 대답은 거래를 꽤 쉽게 목록 구조의 추가 레벨에 싸서거야 : 이것은 또한 CSV 양식에있는 문자열을 갈라 수있는 좋은 방법입니다 참고 와. 그러나 실제로 하나의 숫자 만 갖고 싶거나 원하는 경우 문자열을 스트림으로 변환하고 Read을 사용할 수 있습니다. 내가 그러나, ImportString에 충실 것만큼 성가신 :

MMA7에서
In[3]:= Module[{stream = StringToStream["1.0e6"], number}, 
      number = Read[stream, "Number"]; 
      Close[stream]; 
      number] 
Out[3]= 1.*10^6 
1

, 나는 "요소"인수를 사용합니다.

AA = 가져 오기 [ "data.csv", "데이터"]이 작업을 수행 할 때

은, 모든 문자열이 자동으로 변환됩니다 : 사실, 나는 요소를 지정하지 않고도를 .csv 파일을 가져올 수 없습니다 표현식 : Head/@ Flatten @ aa는 {Real, Real, ....}입니다.또한 "8.5752e-007"은 합법적 인 MMA 표현 인 8.5752 * 10^7이됩니다.

가져 오기 결과가 1xn 목록 {{...}}입니다.

따라서 Transpose @ aa는 nx1 목록 {{.}, {.}, ....}을 제공합니다.

나는 이것이 당신이 원하는 형식이라고 생각한다.