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