Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Simliar字符串,并希望使用python中的RegEx和Pandas创建3个单独的数据帧_Python_Regex_Pandas - Fatal编程技术网

Simliar字符串,并希望使用python中的RegEx和Pandas创建3个单独的数据帧

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

我目前正在尝试为两个非常相似的字符串中的数字创建组。我似乎无法区分表达式,我最近开始学习正则表达式。我想要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,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)]