我是Python或任何语言的新手。我想用纯Python做一些事情,我的数据是:
2.0 2.0
2.0 4.0
2.0 3.0
2.1 6.0
2.1 4.0
2.1 2.0
2.2 10.0
2.2 2.5
2.2 2.5
对于第一列(2.0,2.1,2.2)中的每个值,我想取第二列中的值的平均值,然后从第二列中的每个值中减去该平均值。对于上述数据,我的输出应如下所示:
2.0 2.0 -1.0
2.0 4.0 1.0
2.0 3.0 0.0
2.1 6.0 2.0
2.1 4.0 0.0
2.1 2.0 -2.0
2.2 10.0 5.0
2.2 2.5 -2.5
2.2 2.5 -2.5
我怎样才能在Python中执行此操作?任何帮助将不胜感激。
答案 0 :(得分:3)
所以我不会给你实际的工作代码,因为你没有提供任何代码,但我会指出你正确的方向
第1步:在文件中读取:您应该使用with
构造执行此操作。这将自动处理打开和关闭文件,并使您的代码具有可读性。
f = open("file.txt",'w')
#do stuff
f.close()
相当于
with open("file.txt",'w') as f:
#do stuff
这更干净!
第2步:浏览您的文件。打开文件后,您可以开始将内容保存到内存中。最好逐行执行此操作以避免将整个文件转储到内存中(即避免file.readlines()
)。您可以通过for
循环实际循环遍历文件对象!
with open("file.txt",'r') as f:
for line in f:
#perform process on each line
第3步:保存数据。对于您的过程,您肯定需要一本字典,因此您可以获得识别它的要点。您的第一列将是键,第二列和第三列将构成值。存储数据的最简单方法可能是列表([value1, value2, value3]
),因为每次找到具有相同键的行时都需要更改。一些伪代码可能是:
data = {}
with open("file.txt",'w') as f:
for line in f:
if <first entry of line> in <list of keys in data>:
#Add second entry of line to tuple
else:
#Create new entry in data with a one entry list of the second entry
在此步骤结束时,您不应再位于with
结构
第4步:计算平均值。我建议为此做dict comprehension
。这些可能很棘手,所以我会为你提供更多代码。假设你的dict在第3步结束时看起来像这样:
data = {2.0: [2.0,4.0,3.0],...}
然后你可以:
data = {key, (curVal, <average value>) for key, curVal in data.items()}
您唯一需要做的就是弄清楚如何计算列表中值的平均值。我建议调查map()
第5步:生成输出。现在,您将所有数据都放在字典中,如下所示:
data = {<some number> : ([<number 1>, <number 2>, <number 3>], <average>), ...}
为此,请查看format()
函数以及如何从嵌套结构中提取数据。如果要将数据写回文件,可以再次使用with
,但将模式更改为'w'
希望这有助于您走上正轨,祝您好运!