我正在尝试从一个.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个航班,我只想要第一次也是最后一次航班。
在蟒蛇或熊猫身上有什么办法吗?
发布于 2019-04-02 11:17:13
对于regex来说,这似乎是一项简单的任务:
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
>>>
这种方法的主要优点是您不会丢失中间航班信息,以防将来需要它们。
发布于 2019-04-02 11:08:51
你能试一试以下几点吗?
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
https://stackoverflow.com/questions/55473097
复制相似问题