在Python中将数据列读入数组

2024-10-17 06:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手。我用Fortran生成我想读的数据文件。出于许多原因,我希望使用python来计算数据的平均值和统计数据,而不是fortan。在

我需要将前三行中的条目作为字符串读取,然后将从第四行开始的数据读取为数字。我不需要第一列,但我需要其余的列作为它们自己的数组。在

# 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

数据会持续数千行,有时甚至数百万行。在

我尝试过下面的方法,但是遇到了一些问题,因为我无法分析我所生成的列表,而且似乎也无法将它们转换为数组。不过,我更希望一开始就创建数组,但是如果我能将我的列表转换成数组,那也可以。在我的方法中,当我试图使用列表中的一个元素时,我得到了一个错误,即能量(I)

^{pr2}$

谢谢你的帮助!在


Tags: 数据方法字符串列表数据文件条目原因数字
3条回答

我将使用熊猫模块完成此任务:

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'])

数据帧:

^{pr2}$

所有列的平均值:

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

您还可以使用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之前跳过注释,如下所示:

^{pr2}$

您可以考虑Python中的list,就像其他语言中的array,它是非常优化的。如果您有一些特殊的需要,有一种数组类型可供使用,但很少使用,或者是为科学计算而设计的numpy.array;您必须为此安装Numpy包。在

在执行计算之前,将字符串转换为浮点,如energy.append(float(row[3]))

{cd5>立即使用函数:

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

最后,如@Hamms所说,通过使用方括号e = energy[i]访问元素

相关问题 更多 >