将.dat文件导入到数据帧而不是python中的字符串列表
我正在尝试导入一个.dat文件,该文件作为元数据从我的实验中输出,在标题行中,然后是实验本身的数据(在带虚线的行之后)。我的想法是剥离它,这样我就有了一个包含元数据的字符串变量列表,还有一个变量作为带有结果的数据框(破折号下面的部分)。我在尝试将下面的数据作为数据帧导入时遇到问题,因为上面的元数据被分类为字符串列表,因此整个文件保持这种格式。有没有办法将数据作为数据帧而不是字符串列表获取将.dat文件导入到数据帧而不是python中的字符串列表,python,python-import,Python,Python Import,我正在尝试导入一个.dat文件,该文件作为元数据从我的实验中输出,在标题行中,然后是实验本身的数据(在带虚线的行之后)。我的想法是剥离它,这样我就有了一个包含元数据的字符串变量列表,还有一个变量作为带有结果的数据框(破折号下面的部分)。我在尝试将下面的数据作为数据帧导入时遇到问题,因为上面的元数据被分类为字符串列表,因此整个文件保持这种格式。有没有办法将数据作为数据帧而不是字符串列表获取 Learned-Helplesness-Experiment (TriplePlatform) from
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
我猜你在用熊猫?我认为没有“通用”的方法来做到这一点。 您可以手动打开/解析文件(直到出现“虚线”)。直到划线的部分保留为“字符串列表”。然后告诉pandas导入其余的代码,从行号
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)
如果选项卡
是字段分隔符,或
pandas.read_csv(..., delim_whitespace=True, skiprows=line_no)
如果字段由一个(或多个)
空格分隔
如果我使用如下内容:f=open(filename,'r')fly_data=f.readlines()[36:];f、 close()它仍将作为字符串列表读取。我已经尝试了几个numpy函数和pandas函数。但到目前为止,我还没有找到一个有效的。我只是从python开始,这就是为什么我希望任何人都知道一个用于此的函数数据部分的分隔符是什么?它是选项卡
,还是空白
?它由空白分隔,因此,最后一个工作得很好。谢谢你,伙计!我仍然没有尝试Edit1中的代码,我想我必须在if条件之后编写类似file.readlines()[lines\u no]的代码,然后它应该可以工作。我还需要熟悉python术语:)