Simliar字符串,并希望使用python中的RegEx和Pandas创建3个单独的数据帧
我目前正在尝试为两个非常相似的字符串中的数字创建组。我似乎无法区分表达式,我最近开始学习正则表达式。我想要3个数据帧。“V1”、“V2”和“V3”的数据帧。我只需要每个括号内的第一个值。例如在V1,1-22中,我只想要75.43。希望这是有道理的,我有点卡住了Simliar字符串,并希望使用python中的RegEx和Pandas创建3个单独的数据帧,python,regex,pandas,Python,Regex,Pandas,我目前正在尝试为两个非常相似的字符串中的数字创建组。我似乎无法区分表达式,我最近开始学习正则表达式。我想要3个数据帧。“V1”、“V2”和“V3”的数据帧。我只需要每个括号内的第一个值。例如在V1,1-22中,我只想要75.43。希望这是有道理的,我有点卡住了 TEXT,TEXT,20190726,TEXT,TEXT00000,,NORMAL; * TEXT,TEXT-LT.V1,,,4.0,TEXT,NORMAL; 1-22,,{(75.43,0.0),(75.43,110.0),(75.45
TEXT,TEXT,20190726,TEXT,TEXT00000,,NORMAL;
*
TEXT,TEXT-LT.V1,,,4.0,TEXT,NORMAL;
1-22,,{(75.43,0.0),(75.43,110.0),(75.45,119.0),(96.54,139.0),(109.25,159.0)},
23,,{(20.82,0.0),(20.82,110.0),(20.84,119.0),(41.93,139.0),(54.64,159.0)},
24,,{(81.26,0.0),(81.26,110.0),(81.28,119.0),(102.37,139.0),(115.08,159.0)},
*
*
TEXT,TEXT,20190726,TEXT,TEXT00000,,NORMAL;
*
TEXT,TEXT-TEXT.V2,,,4.0,TEXT,NORMAL;
1-22,,{(74.93,0.0),(74.93,110.0),(74.95,119.0),(74.95,139.0),(74.95,163.0)},
23,,{(24.98,0.0),(24.98,110.0),(25.00,119.0),(25.00,139.0),(25.00,163.0)},
24,,{(80.76,0.0),(80.76,110.0),(80.78,119.0),(80.78,139.0),(80.78,163.0)},
*
*
TEXT,TEXT,20190726,TEXT,TEXT00000,,NORMAL;
*
TEXT,TEXT-TEXT.V3,,,2.0,TEXT,NORMAL;
1-22,,{(74.94,0.0),(74.94,70.0),(75.46,147.0),(96.54,167.0),(109.25,186.0),(109.27,210.0)},
23-24,,{(80.77,0.0),(80.77,70.0),(81.29,147.0),(102.37,167.0),(115.08,186.0),(115.10,210.0)},
*
理想情况下,我希望V1、V2和V3有3个独立的数据帧
Expected Result
Dataframe 1
Hour Value 1 Value 2 Value 3 Value 4 Value 5 Value 6
0 1-22 75.43 75.43 75.45 96.54 109.25
1 23 20.82 20.82 20.84 41.93 54.64
2 24 81.26 81.26 81.28 102.37 115.08
Dataframe 2
Hour Value 1 Value 2 Value 3 Value 4 Value 5 Value 6
0 1-22 74.93 74.93 74.95 74.95 74.95
1 23 24.98 24.98 25.00 25.00 25.00
2 24 80.76 80.76 80.78 80.78 80.78
Dataframe 3
Hour Value 1 Value 2 Value 3 Value 4 Value 5 Value 6
0 1-22 74.94 74.94 75.46 96.54 109.25 109.27
1 23-24 80.77 80.77 81.29 102.37 115.08 115.10
如果我理解正确,您希望在
Hour1=1-22
时分割数据帧。试试这个:
s = (match_Value_df['Hour'] == '1-22').cumsum()
dfs = []
for i in range(s.min(), s.max() + 1):
subDF = match_Value_df.loc[s == i]
dfs.append(subDF)
结果:
dfs[0]:
Hour Value 1 Value 2 Value 3 Value 4 Value 5 Value 6
0 1-22 75.43 75.43 75.45 96.54 109.25
1 23 20.82 20.82 20.84 41.93 54.64
2 24 81.26 81.26 81.28 102.37 115.08
dfs[1]:
Hour Value 1 Value 2 Value 3 Value 4 Value 5 Value 6
3 1-22 74.93 74.93 74.95 74.95 74.95
4 23 24.98 24.98 25.00 25.00 25.00
5 24 80.76 80.76 80.78 80.78 80.78
dfs[2]:
Hour Value 1 Value 2 Value 3 Value 4 Value 5 Value 6
6 1-22 74.94 74.94 75.46 96.54 109.25 109.27
7 23-24 80.77 80.77 81.29 102.37 115.08 115.10
如果要将它们放入3个不同的变量中:
v1, v2, v3 = dfs[slice(0, 3)]
我还没有完全运行代码,但是您可以尝试使用代码r'((\d+-?\d+)、+\{((((\d+\.\d+)、\d+\.\d+))、+\},)来缩短代码,然后根据findall中的匹配索引创建三个数据帧。在测试正则表达式代码时,我总是觉得这个网站很有用。我以前考虑过根据findall语句的索引创建数据库。但有时文本文件的索引会比这个多。时间可能是1-2,3-4,5-6,7-12,12-24。谢谢,我会尽量缩短它,我最近也发现了这个网站。两者似乎都很好用!您可以为V添加一个调用,如r'(V\d+)|((\d+-?\d+),+\{((((\d+\.\d+),+(\d+\.\d+),+\},)')。这将使您有机会找到它们之间的指数,从而将事情分解。
v1, v2, v3 = dfs[slice(0, 3)]