在Python中将数据列读入数组

在Python中将数据列读入数组,python,arrays,list,Python,Arrays,List,我是Python新手。我使用Fortran生成我想要读取的数据文件。出于许多原因,我希望使用python来计算数据的平均值和统计数据,而不是fortan 我需要将前三行中的条目作为字符串读取,然后从第四行开始的数据作为数字读取。我不需要第一列,但我需要其余的列作为它们自己的数组 # Instantaneous properties # MC_STEP Density Pressure Energy_Total #

我是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)


谢谢你的帮助

我将使用熊猫模块执行此任务:

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

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

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

你可以在Python中考虑一个<代码>列表/>代码,就像其他语言中的<代码>数组< /代码>,它是非常优化的。如果您有一些特殊的需求,有一种可用但很少使用的数组类型,或者是为科学计算而设计的

numpy.array
;您必须为此安装软件包

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

可以使用
map
功能立即执行此操作:

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

最后,如@ Hamms所说,使用方括号访问元素:“代码> e=Eng[i],/代码>

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

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

可以使用
map
功能立即执行此操作:

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

最后,正如@Hamms所说,使用方括号
e=energy[i]

访问元素您还可以使用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'])
next(f)
当然,这假设文件的格式更像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'])
next(f)

您还可以使用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'])
next(f)
当然,这假设文件的格式更像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'])
next(f)

你有什么错误?你真的在写能量(i)?因为如果是这样,那就是;尝试
Energy[i]
还要注意,在python中,大写的名称通常是为类保留的。常规的变量和方法是使用什么样的错误?你真的在写能量(i)?因为如果是这样,那就是;尝试
Energy[i]
还要注意,在python中,大写的名称通常是为类保留的。约定用于正则变量和方法