2016-07-07 5 views
0

저는 Python을 처음 사용합니다. 필자는 Fortran을 사용하여 읽고 자하는 데이터 파일을 생성합니다. 여러 이유들로 나는 파이썬을 사용하여 fortan보다는 데이터에 대한 평균과 통계를 계산하고 싶습니다.데이터 열을 Python 배열로 읽어들입니다.

처음 세 행의 항목을 문자열로 읽은 다음 네 번째 행에서 숫자로 시작하는 데이터를 문자열로 읽어야합니다. 첫 번째 열은 필요 없지만 나머지 열은 각각 자신의 배열로 필요합니다.

# Instantaneous properties 
# MC_STEP    Density   Pressure  Energy_Total 
#     (molec/A^3)    (bar)  (kJ/mol)-Ext 
     0 0.34130959E-01 0.52255964E+05 0.26562549E+04 
     10 0.34130959E-01 0.52174646E+05 0.25835710E+04 
     20 0.34130959E-01 0.52050492E+05 0.25278775E+04 

그리고 데이터는 수천 개, 때로는 수백만 개가됩니다.

나는 다음을 시도했으나 내가 만든 목록을 분석 할 수 없으므로 문제가 발생하며 배열로 변환 할 수없는 것으로 보입니다. 그러나 배열을 만들기 만하면 좋겠지 만 목록을 배열로 변환하면 작동 할 수도 있습니다. 목록에서 요소 (예 : Energy (i))를 사용하려고하면 오류가 발생합니다.

감사합니다.

나는이 작업을 위해 팬더 모듈을 사용
+0

어떤 오류가 발생합니까? 당신은 실제로'에너지 (i)'를 쓰고 있습니까? 그렇다면 요소에 액세스하는 올바른 방법이 아닙니다. (https://docs.python.org/3/tutorial/introduction.html#lists); 'Energy [i]' – Hamms

+0

또한 파이썬에서는 대문자로 된 이름이 일반적으로 클래스 용으로 예약되어 있음을 주목하십시오. 규칙은 일반적인 변수와 메소드에 대해 [모두 소문자, 밑줄로 구분 된 이름] (https://www.python.org/dev/peps/pep-0008/#function-names)을 사용하는 것입니다. – Hamms

답변

0

:

import pandas as pd 

In [9]: df = pd.read_csv('a.csv', delim_whitespace=True, 
         comment='#', skiprows=3,header=None, 
         names=['MC_STEP','Density','Pressure','Energy_Total']) 

데이터 프레임 : 모든 열에 대한

In [10]: df 
Out[10]: 
    MC_STEP Density Pressure Energy_Total 
0  0 0.034131 52255.964  2656.2549 
1  10 0.034131 52174.646  2583.5710 
2  20 0.034131 52050.492  2527.8775 

평균 값 :

In [11]: df.mean() 
Out[11]: 
MC_STEP   10.000000 
Density    0.034131 
Pressure  52160.367333 
Energy_Total  2589.234467 
dtype: float64 
0

당신은 파이썬에서 list을 고려할 수 있습니다 다른 언어로 array처럼 매우 최적화되어 있습니다. 특별한 요구 사항이있는 경우 사용할 수있는 배열 유형이 있지만 드물게 사용됩니다. 과학적 계산을 위해 설계된 numpy.array입니다. 이를 위해 Numpy 패키지를 설치해야합니다. ,

row = map(float, line.split()) 

마지막 @Hamms 말했듯이, 사각형을 사용하여 요소에 액세스 : 계산을 수행하기 전에

energy.append(float(row[3]))

은 아마 한 번 map 기능을 사용 할에 같이 float로 문자열을 캐스팅 괄호 e = energy[i]

0

또한 다음과 같이, 사전에 각 행을 읽을 수있는 CSV 모듈의 DictReader를 사용할 수 있습니다

with open('filename', 'r') as f: 
    reader = csv.DictReader(f, delimiter=r'\s+', fieldnames=('MC_STEP', 'DENSITY', 'PRESSURE', 'ENERGY_TOTAL') 
    for row in reader: 
     Density.append(float(row['DENSITY']) 
     Pressure.append(float(row['PRESSURE']) 
     Energy.append(float(row['ENERGY_TOTAL']) 

물론이 파일은 CSV (즉, 설명 없음)처럼 형식이 지정되어 있다고 가정합니다. 파일의 맨 위에 주석이 있으면 다음과 같이 DictReader를 초기화하기 전에 건너 뛸 수 있습니다.

next(f) 
관련 문제