我还没有完全让它工作,但我认为这是因为我复制/粘贴数据的方式。试试这个,如果它不起作用,请告诉我。
使用这个问题的一些灵感
pat = "TimeStamp\tGazePointXLeft\tGazePointYLeft\tValidityLeft\tGazePointXRight\tGazePointYRight\tValidityRight\tGazePointX\tGazePointY\tEvent\n"
with open('rec.txt') as infile:
header, names, tail = infile.read().partition(pat)
names = names.split() # get rid of the tabs here
all_data = tail.split(pat)
res = [pd.read_csv(StringIO(x), sep='\t', names=names) for x in all_data]
我们读入整个文件,因此这不适用于大文件,然后根据给出列名的已知行对其进行分区。 tail
只是一个包含其余数据的字符串,因此我们可以再次根据名称对其进行拆分。可能有比使用 StringIO 更好的方法,但这应该可行。
我注意到您希望如何将单独的块连接在一起,但这会将它们保留为列表。您可以根据需要从那里连接。
对于较大的文件,您可能需要编写一个生成器来读取,直到您点击列名并写入一个新文件,直到您再次点击它们。然后使用像安迪的答案这样的东西单独阅读这些内容。
一个与如何使用多个块一起工作的单独问题。假设你有Dataframe
我称之为 s的列表res
,你可以使用 pandas 的concat将它们连接到一个带有 MultiIndex 的 DataFrame 中(另请参见 Andy 发布的链接)。
In [122]: df = pd.concat(res, axis=1, keys=['a', 'b', 'c']) # Use whatever makes sense for the keys
In [123]: df.xs('TimeStamp', level=1, axis=1)
Out[123]:
a b c
0 NaN NaN NaN
1 0.0 0.0 0.0
2 3.3 3.3 3.3
3 6.6 6.6 6.6