2017-04-10 19 views
0

我试图导入从我的实验中输出的.dat文件,作为标题行中的元数据,然后是实验本身的数据(之后用虚线划线后)。我的想法是剥离它,以便我有一个字符串变量列表,其中包含元数据和另一个变量作为数据框与结果(虚线下方的部分)。由于上面的元数据被归类为字符串列表,因此我试图将以下数据作为数据框导入时遇到问题,因此整个文件保持此格式。有没有办法将数据作为数据框而不是字符串列表?将.dat文件导入到数据框而不是python中的字符串列表

Learned-Helplesness-Experiment (TriplePlatform) from  05.04.2017   13:41:24 

software version: DoublePlatform_1.3 04-Jun-2014 

Setup of Experiment:  

Platform 1: 
ExpType: M M M M M M M M M M 

heated side: right right right right right right right  right right right 

PIs:  n. def.  0 0 0 0 0 0 0 0 0 

Platform 2: 
ExpType: Te Te Te Y Te Y Y Y Y Y 

heated side: right right right ->M right ->M ->M ->M ->M ->M 

PIs:  n. def.  0 0 0 0 0 0 0 0 0 

Platform 3: 
ExpType: Y Y Y Y M_S Y Y Y Y Y 

heated side: ->M ->M ->M ->M right ->M ->M ->M ->M ->M 

PIs:  n. def.  0 0 0 0 0 0 0 0 0 


------------------------------------ ------------------------------------ 

0 0 0 0 0 
1 47 -0.3759766 0.1123047 0.3710938 
2 97 0.01953125 -0.1318359 0.1123047 
3 157 -0.4150391 0.2246094 0.3369141 
4 207 -0.01953125 -0.2539063 0.1318359 
5 257 -0.3515625 0.3027344 0.3222656 

回答

1

我猜你正在使用熊猫?我认为没有“一般”的做法。 您可以手动打开/解析文件(直到“虚线”)。直到您保留为“字符串列表”的虚线部分。然后你告诉大熊猫从行号x(在这里找到破折号)开始输入其余的行。该选项被称为skiprows

EDIT1(响应评论)

这取决于你的头是否有行的常数。如果没有,你可能想通过行的文件行阅读,寻找短线:

with open('filename', 'r') as file: 
    line_no = 0 
    for line in file.read(): 
     line_no += 1 
     if line.startswith('-'*37): 
      # do sth 
      break 
     else: 
      # do sth 

EDIT2

要导入数据的一部分,你可以使用

pandas.read_csv(..., sep='\t', skiprows=line_no) 

如果tab是字段分隔符,或者

pandas.read_csv(..., delim_whitespace=True, skiprows=line_no) 

如果字段由一个(或多个)分隔blanks

+0

如果我使用类似这样的内容:f = open(filename,'r') fly_data = f.readlines()[36:]; f.close()它仍将作为字符串列表读取。我已经尝试了几个numpy功能和熊猫功能。但是我到目前为止没有找到任何有效的工作。我刚刚开始使用python,所以这就是为什么我期望任何人知道一个函数适用于此 – chiser

+0

什么是数据部分的分隔符?它是''tab''还是''blank''? –

+0

它由空白分隔,因此,最后一个很好地工作。谢啦!我仍然没有尝试Edit1中的代码,我想我必须在if条件之后写入类似file.readlines()[lines_no]的东西,然后它才能工作。我需要熟悉python命名法:) – chiser

相关问题