从.dat文件中删除不需要的字符,然后在python中进行计算

问题描述 投票:0回答:1

我需要在python中读取.dat文件,该文件总共有3列,数百行。这些列包含多个字符(数字和字符串)。因此,在加载该 .dat 文件之前,我是否需要删除所有其他不需要的字符串? ...如果没有,我如何有选择地声明该列并要求 python 进行数学计算?... 我已经开始使用代码..似乎可以工作,但包含很多 for 循环..而且我对 python 很陌生,所以我很感激任何更简单操作的建议..每次..我在这里看...似乎只适用于字符串..

.dat 文件的示例是serial_2.dat:

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

我已经根据您的建议添加了用作起始代码的代码,以删除字符并创建一个新列来计算第 2 列和第 3 列之间的平均值:

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

python numpy for-loop split with-statement
1个回答
0
投票

您可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.