python - 类似的字符串,并希望在 python 中使用 RegEx、Pandas 创建 3 个单独的数据帧

标签 python regex pandas

我目前正在尝试为两个非常相似的字符串中的数字创建组。我似乎无法分离表达式,我最近开始学习 RegEx。我想要 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)},
*
What I tried
f = open("TextFile.txt","r")
TextFile_str = f.read()
Value_Only = re.compile(r'(\d+-?\d+),+\{\((\d+\.\d+),\d+\.\d+\),\((\d+\.\d+),\d+\.\d+\),\((\d+\.\d+),\d+\.\d+\),\((\d+\.\d+),\d+\.\d+\),\((\d+\.\d+),\d+\.\d+\),*\(*(\d*\.*\d*),*\d*\.*\d*\)*\}*')
match_Value = Value_Only.findall(TextFile_str)
match_Value_df = pd.DataFrame(match_Value)
match_Value_df.columns = ['Hour', 'Value 1', 'Value 2', 'Value 3', 'Value 4', 'Value 5', 'Value 6']

#How it looks 
    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        
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        
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

理想情况下,我希望 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)]

关于python - 类似的字符串,并希望在 python 中使用 RegEx、Pandas 创建 3 个单独的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57222220/

相关文章:

pandas.io.ga 不适合我

python - Pandas 合并101

python - 如何在 django 项目中使用 jinja2 呈现 Markdown 内容?

python - python中 'print'的类型是什么

python - 将 pcap 文件转换为字节流的方法

regex - Grep:查找调用函数的函数

regex - .htaccess 重写除特定 http_host 之外的任何内容的规则

python - 如何模拟类层次结构

javascript - 正则表达式忽略大小写

python - 将组折叠为一行 Pandas 数据框