gpt4 book ai didi

Python-分割一行数字,其中一些数字包含破折号

转载 作者:行者123 更新时间:2023-12-01 00:17:31 26 4
gpt4 key购买 nike

我有一个数据集,其中线条类似于:

G. Smith      2.2 - 1.6     1.0 - 1.5     33 - 55     660
F. John 1.4 - 0.2. 60 850 (early) - 1100 (late)
R. Kahn 1.9 - 1.4 1.9 700 - 850
L. Terry 0.6 - 0.35. 1.8. 60 1100 - 1400

我正在尝试获取最后一列的平均值。对于用破折号分隔的数字,我想将它们视为自己的平均值(例如,在计算该列的总体平均值时,700 - 850 将被视为其平均值,775)

到目前为止,我的方法是分割该行,然后每次循环一行时对最后一个索引处的值进行平均。但是,我只能让它分割每个值,使连字符的数字成为 2 个不同的值,或者让它看起来完美分割,但这些值不是用逗号分隔的,因此我无法访问该行中的特定值。这是我以第二行输出为例进行的尝试(请注意,我什至没有尝试包括平均计算,因为我无法正确分割行):

with open('file.txt', 'r') as f:
l = f.readline()
while l:
current_line = re.split('\W\W\W+', l)
print(current_line)
l = f.readline()

返回:

['F. John', '1.4', '0.2', '60', '850 (early', '1100 (late)\n']

还有...

with open('file.txt', 'r') as f:
l = f.readline()
while l:
current_line = re.split('^-\W\W\W+', l)
print(current_line)
l = f.readline()

返回:

 ['F. John           1.4 - 0.2                    60          850 (early) - 1100 (late)\n']

第二个结果是更好的,因为它将虚线值保持在一起,但是正如您所看到的,所有值都分组在一起,而不是每个值都由一列分隔。

期望的结果:

 ['F. John', '1.4 - 0.2', '60', '850 (early) - 1100 (late)\n']

其中一行括号中还存在“早/晚”的问题。我什至还没有开始考虑如何解决这个问题,因此也将不胜感激。

还有,有没有办法让它识别空格?我问这个是因为稍后我还必须获得第三列的最大值。我现在的想法是,如果我尝试访问第二行上每行的索引 2(第三列的值应该是),我将读取第四列的值,因为第三列缺少该值并且在列表中,它只是继续到下一个值,而不为空字段创建占位符。

如果可能的话,第二行的预期结果将如下所示:

['F. John', '1.4 - 0.2', ' ', '60', '850 (early) - 1100 (late)\n']

或者甚至:

['F. John', '1.4 - 0.2', NULL, '60', '850 (early) - 1100 (late)\n']

最佳答案

last_col = re.split("\s{2,}", l)[-1] # eg '850 (early) - 1100 (late)' or '600'
patt = re.compile("(?P<num1>[0-9]+)[a-zA-z(\)\- ]+(?P<num2>[0-9]+)")
g = patt.search(last_col)

if g:
val = (int(g.group('num1')) + int(g.group('num2'))) / 2
else:
val = int(last_col)

`

关于Python-分割一行数字,其中一些数字包含破折号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com