python 从.dat文件中删除不需要的字符,然后对结果执行计算

vlju58qv  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(150)

我需要用Python读取一个.dat文件。该文件总共有3列和数百行。第二列和第三列包含两个字符,后面是我想提取的浮点数-第二列总是以"SA"开头,第三列总是以"SC"开头。我目前正在加载数据并循环遍历每行以提取值,但有没有更好的方法呢
一旦数据被清理,我想对结果执行一些计算,即计算平均值。
下面是.dat文件中两行代码的示例:

9:01:15 SA7.998  SC7.968 
9:01:16 SA7.998  SC7.968

字符串
这是我目前使用的代码。

import numpy as np
import os.path
from statistics import mean

time=[]
s_1=[]
s_2=[]
s1=[]
s2=[]
r1=[]
r2=[]
avgg=[]

# Reading data from file
with open('serial_2.dat','r') as f:
    dat=f.readlines()      
for i in dat: 
     y=i.split()                          # cleaning and getting columns without spaces  
     time.append(y[0])
     s1.append(y[1])
     s2.append(y[2])
#getting only numbers without strings (SA and SC)           
for counter in (range(0,len(s1))):
    S_1=s1[counter]
    r1.append(S_1[2:])
    r1_f=np.array(r1, dtype='float32')  

   S_2=s2[counter]
   r2.append(S_2[2:])
   r2_f=np.array(r2, dtype='float32')  
   avgg=r1_f+r2_f/2
print(np.mean(avgg))

disbfnqx

disbfnqx1#

你可以使用pandas来实现:

#! pip install pandas
import pandas as pd
import numpy as np

df = pd.read_csv('serial_2.dat', sep='\s+', header=None, names=['time', 's1', 's2'])
df['s1'] = df['s1'].str.extract('^[\D]+(.*)').astype(float)
df['s2'] = df['s2'].str.extract('^[\D]+(.*)').astype(float)

字符串
输出量:

>>> df
      time     s1     s2
0  9:01:15  7.998  7.968
1  9:01:16  7.998  7.968

>>> df.dtypes
time     object
s1      float64
s2      float64
dtype: object


如果s1和s2列中总是有2个字符,可以避免正则表达式,并去掉前两个字符:

df['s1'] = df['s1'].str[2:].astype(float)
df['s2'] = df['s2'].str[2:].astype(float)


然后计算平均值:

# With pandas
>>> df[['s1', 's2']].mean().mean()
7.983

# With numpy
>>> np.mean(df[['s1', 's2']])
7.983

相关问题