Python将文本文件中的数字块(由单行文本分隔)读取到Numpy数组或Pandas DataFrame中



我有以下两个文本文件,它们包含由文本行分隔的数字块。我正在尝试将这些块读取到Pandas数据帧或Numpy数组中。以下是文件:

File1.txt:

Line one text
Line two text
Line three text
Temperature Readings:  1   5   abcd
17 7.7
18 1.9
19 14.6
11 7.1
4 2.4
Temperature Readings:  2   3   ddef
26 4.2
45 12.0
2 9.3
Air-Pressure was taken:   17.0  474.0
Top Total
11    317
14     34

File2.txt:

Line one text
Line two text
Line three text
Temperature Readings:  1   3   fnlksn
11 8.9
35 2.6
41 1.7
14 3.3
8 11.5
Temperature Readings:  2   7   vsfgfs
16 26.7
91 10.5
12 11.3
Temperature Readings:  3   4   tomt_2
11 11.2
78 2.8
56 1.5
Air-Pressure was taken:   17.0  474.0
Top Total
74     31
99     14
83     04
9     10

我正在寻找一种读取这两个文件的方法。问题是,在第一个文件中,只有2个温度读数块。第二个文件有不同数量的块——在这个例子中是3,但它可以是任何数字。

这就是造成我问题的原因:

  • 我想读一下每个块标题下面的数字。我会的喜欢将这些数字读取到numpy数组或pandas数据帧中
  • 我遇到的第二个问题是我不知道如何阅读数字sinec有一个前导空格-这使得它很难将它们分开

这是我想要的:

从File1.txt:t_1=

0    1
0 17  7.7
1 18  1.9
3 19 14.6
4  4  2.4

t_2=

0    1
0 26  4.2
1 45 12.0
2  2  9.3

从File2.txt:t_1=

0    1
0 11  8.9
1 35  2.6
2 41  1.7
3 14  3.3
4  8 11.5

t_2=

0    1
0 16 26.7
1 91 10.5
2 12 11.3

t_3=

0    1
0 11 11.2
1 78  2.8
2 56  1.5

在Python 2.7中有办法做到这一点吗?

EDIT:包括Air-Pressure及以下的行可以忽略。

不确定是否可以在panda中完成所有操作,但可以使用groupbyitertools.islice跳过并分组行:

from itertools import groupby,islice
import pandas as pd
with open("file2.txt") as f:
for k, v in groupby(islice(f, 3, None),key=lambda x:  x.strip()[0:1].isdigit()):
val = list(v)
if k:
df = pd.DataFrame(map(str.split,val))
print(df)
print(""))
elif val[-1] == 'Top Totaln':
break
0     1
0  11   8.9
1  35   2.6
2  41   1.7
3  14   3.3
4   8  11.5
0     1
0  16  26.7
1  91  10.5
2  12  11.3
0     1
0  11  11.2
1  78   2.8
2  56   1.5

它们实际上都是不同的数据名,如何存储取决于您:

data_frames = []
with open("file2.txt") as f:
for k, v in groupby(islice(f, 3, None),key=lambda x:  x.strip()[0:1].isdigit()):
val = list(v)
if k:
data_frames.append(pd.DataFrame(map(str.split,val)))
elif val[-1] == 'Top Totaln':
break
print(data_frames) # three dataframes in a list

最新更新