我想用python中的文本中的每一列用平均值替换缺失的数据点。
所以,我的想法是:
我认为我可以直到第2步,但我在第3步和第4步遇到了麻烦。 我的代码如下;
for columns in ( raw.strip().split() for raw in f ):
a.append(columns[c])
x = np.array(a, float)
y = np.ma.masked_array(x,np.isnan(x))
y1 = np.mean(y)
a1 = ' '.join(a)
a1.replace("nan", "y1")
f1 = open("practice.txt", "w")
f1.write(a1)
正如您所看到的,此处的问题与使用'replace'命令将nan替换为mean有关,因为它只处理字符串。 我将非常感谢任何帮助或建议。 我的部分数据如下所示
1.60566 nan 2.00755 2.32407
1.502 nan 1.36522 1.555
0.63333 nan 1.56102 2.08929
nan nan 0.87451 1.06667
2.5 nan 1.88889 1.0661
3.88197 nan 3.0875 2.75909
4.02692 nan 3.36154 3.92895
5.9907 nan 5.29535 5.82245
6.16111 2.67317 6.04074 6.25588
6.88269 2.62241 5.43958 6.07
5.92 2.48627 5.91818 6.75862
6.93429 6.17333 7.34 7.76538
8.25143 7.925 7.8087 8.725
8.1025 8.19429 8.11563 8.80937
8.12105 8.145 7.83889 8.37576
7.47292 8.65 8.35536 8.61081
8.10392 8.66032 8.74082 9.65484
10.03036 10.74727 10.634 10.50961
我想在每列中替换那些具有平均值的nans。
答案 0 :(得分:2)
你的问题是y1不是字符串?你可以:a1.replace("nan", str(y1))
答案 1 :(得分:2)
请记住replace
a1 = a1.replace("nan", str(y1))
答案 2 :(得分:2)
您可以使用蒙面数组filled method:
import numpy as np
filename = '/tmp/data'
with open(filename, 'w') as f:
f.write('''
1 2 nan
2 nan 3
nan 3 4
nan nan nan
''')
arr = np.genfromtxt(filename)
print(arr)
# [[ 1. 2. nan]
# [ 2. nan 3.]
# [ nan 3. 4.]
# [ nan nan nan]]
mask = np.isnan(arr)
masked_arr = np.ma.masked_array(arr, mask)
means = np.mean(masked_arr, axis=0)
print(means)
# [1.5 2.5 3.5]
通过上述设置,
print(masked_arr.filled(means))
产量
[[ 1. 2. 3.5]
[ 2. 2.5 3. ]
[ 1.5 3. 4. ]
[ 1.5 2.5 3.5]]
然后,要将数组写入文件,可以使用np.savetxt:
np.savetxt(filename, masked_arr.filled(means), fmt='%0.2f')