我有一个* .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)]
如何将上述值转换为以下值?
答案 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