我有一个数据集,其中的行类似于:
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
我正在尝试获取最后一列的平均值。对于用破折号分隔的数字,我想将其视为自己的平均值(例如,在计算列的总体平均值时,应将其视为平均值775-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','850 (early) - 1100 (late)\n']
其中一行上的括号中也有“早/晚”的问题。我什至还没有开始思考如何解决这个问题,因此对此的提示也将不胜感激。
还有,有没有办法让它识别空格?我之所以这样问,是因为稍后我还必须获得第三列的最大值。我现在想的方式是,如果我尝试访问第二行上每一行的索引2(第三列的值应该在其中),我将读取第四列的值,因为第三列缺少该值,并且在列表中,它只是继续到下一个值,而没有为空白字段设置占位符。
如果可能的话,第二行的预期结果将如下所示:
['F. John',' ','850 (early) - 1100 (late)\n']
甚至:
['F. John',NULL,'850 (early) - 1100 (late)\n']