我是Python新手。我使用Fortran生成我想要阅读的数据文件。出于多种原因,我想使用python来计算数据的平均值和统计数据而不是fortan。
我需要将前三行中的条目作为字符串读取,然后将从第四行开始的数据作为数字读取。我不需要第一列,但我确实需要其余列作为它们自己的数组。
count
数据持续数千,有时数百万行。
我尝试了以下方法,但遇到了问题,因为我无法分析我所做的列表,而且我似乎无法将它们转换为数组。然而,我宁愿只是创建数组,但如果我可以将我的列表转换为可以工作的数组。在我的方法中,当我尝试在其中一个列表中使用元素时,我得到一个错误,即Energy(i)
# 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
我感谢任何帮助!
答案 0 :(得分:2)
我会使用pandas模块执行此任务:
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
答案 1 :(得分:2)
您可以将Python中的list
视为其他语言中的array
,并且它已经过优化。如果您有一些特殊需求,可以使用但很少使用的数组类型,或者用于科学计算的numpy.array
;你必须为此安装Numpy包。
在执行计算之前,将字符串转换为浮点数,例如energy.append(float(row[3]))
也许可以使用map
函数立即执行此操作:
row = map(float, line.split())
最后,正如@Hamms所说,使用方括号e = energy[i]
答案 2 :(得分:2)
您还可以使用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)