用.txt文件构建一个DataFrame

时间:2019-04-02 10:58:47

标签: python pandas

我正在尝试从.txt文件构建数据框架。 .txt文件(这是我在另一个程序中使用的参数)看起来像这样:

a('s1','0')=1;
a('s2','0')=1;
a('s2','18')=1;
a('s3','0')=1;
a('s3','19')=1;
a('s3','21')=1;
a('s4','0')=1;
a('s4','20')=1;

其中s1,s2,s3 ...是路线,因此,路线s1,路线s2,路线s3 ...适用于航班。而以下“ 0”,“ 18”,“ 19”是航班的ID。因此,基本上,路线s1只是“ 0”航班,但路线s3则是先进行“ 0”航班,然后是“ 19”航班,最后是“ 21”航班。

我要从此txt文件中提取的是一个数据框,其中包含路线(s1,s2,s ...)以及在该路线中运行的首个和最后一个航班。因此,如果s10路线有5个航班,我只想要该路线的首个和最后一个航班。

Python或熊猫中有办法吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方法吗?

import pandas as pd
with open('data.txt', 'r') as infile:
    data = infile.read()
df = pd.DataFrame([i[i.find("(")+1:i.find(")")].replace("'", '').split(',')
                   for i in data.split('\n')], columns=['route', 'flight_id'])
print(df)

输出:

  route flight_id
0    s1         0
1    s2         0
2    s2        18
3    s3         0
4    s3        19
5    s4         0
6    s4        20

答案 1 :(得分:0)

对于正则表达式而言,这似乎是一项简单的任务:

import re
import pandas as pd

extract_route = re.compile(r"a\('(\w+)','(\d+)'\)=1;")

with open('data.txt', 'r') as f:
    routes = f.readlines()

df = pd.DataFrame([extract_route.split(route)[1:3] for route in routes],
    columns=['Route', 'FlightID'])

作为答案的补充,您现在可以按“路线”对系列进行分组:

groups = df.groupby('Route')

有了这些组后,您可以使用以下方法获得首个航班和最后一个航班:

>>> groups.first()
      FlightID
Route         
s1           0
s2           0
s3           0
s4           0
>>> groups.last()
      FlightID
Route         
s1           0
s2          18
s3          21
s4          20
>>>

这种方法的主要优点是您不会丢失中间航班信息,以防日后需要它们。