拆分* .dat文件,其宽度固定,每个宽度都已知

时间:2017-10-19 16:34:38

标签: python pandas split

我有一个* .dat文件。我知道我要分割文件的位置。他们是

[5,5,10,10,10,10,10,5,5,10]

但是,pandas read_fwf采用以下格式的值:

[(0, 5), (5, 10), (10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 65), (65, 70), (70, 80)]

如何将上述值转换​​为以下值?

2 个答案:

答案 0 :(得分:4)

我会使用numpy cumsum:

In [11]: c = np.cumsum([5,5,10,10,10,10,10,5,5,10])

In [12]: s = np.insert(c + 1, 0, 0)

In [13]: list(zip(s, c))
Out[13]:
[(0, 5),
 (6, 10),
 (11, 20),
 (21, 30),
 (31, 40),
 (41, 50),
 (51, 60),
 (61, 65),
 (66, 70),
 (71, 80)]

修改

s = np.insert(c, 0, 0)
list(zip(s,c))

[(0, 5),(5, 10),(10, 20), (20, 30), (30, 40), (40, 50), (50, 60), (60, 65), (65, 70), (70, 80)]

答案 1 :(得分:2)

colspecs的{​​{1}}参数使用半开间隔,实际上它需要

read_fwf

如果累积添加宽度,则会获得开始(和结束)索引:

[(0, 5), (5, 10), (10, 20), …]

然后在下端和上端使用widths = [5,5,10,10,10,10,10,5,5,10] borders = np.cumsum([0] + widths) >>> array([ 0, 5, 10, 20, 30, 40, 50, 60, 65, 70, 80])

zip