我在 python 中生成了 2 列,我将它们转换为 np 数组,并设法将它们保存在一个新文件中。
fi = np.array([co,pred[40]])
fi=fi.T
np.savetxt("Pred_40.dat", fi, delimiter=" ")
现在我想创建一个内部函数来读取我的新文件。我做了,但我得到一个错误告诉我:无法将字符串转换为浮点'。'
def open_vmodel(vmodel_file,n_lag):
list_ = []
index = []
vargplot = open(vmodel_file)
for i in range(n_lag):
dm = vargplot.readline()
list_.append(list(map(float,dm)))
result = pd.DataFrame(list_)
result.columns = ['Lag Distance','Variogram Value']
istart = 0
return pd.DataFrame(result)
vmodel_df = open_vmodel("Pred_40.dat",n_lag=1)
答案 0 :(得分:1)
我很确定 list(map(float, dm))
行是错误的。它尝试将 dm 的每个字符解析为一个数字,因此当它尝试解析 '.' 时。作为一个数字,它失败了。也许尝试类似 list(map(float, dm.split()))
答案 1 :(得分:0)
你能用 dm = vargplot.readline().replace(".","")
吗?有一个点,所以也许它会解决您的问题。
答案 2 :(得分:0)
也许是本地化的问题,因为有些地区使用逗号而不是点来表示小数位。当您强制转换为浮点数时,其中一个数字可能类似于 0.2
,而 Python 可能需要 0,2
。
import locale
locale.setlocale(locale.LC_NUMERIC,"C")
这会将数字格式设置为标准格式,它将接受 0.5
而不是 0,5
答案 3 :(得分:0)
使用您的文件示例(来自评论):
In [218]: txt="""0.000000000000000000e+00 0.000000000000000000e+00
...: 0.000000000000000000e+00 0.000000000000000000e+00
...: 1.000000000000000000e+01 5.626957416534423828e-01"""
In [220]: txt = txt.splitlines()
In [221]: txt
Out[221]:
['0.000000000000000000e+00 0.000000000000000000e+00 ',
'0.000000000000000000e+00 0.000000000000000000e+00 ',
'1.000000000000000000e+01 5.626957416534423828e-01']
您的地图对一行的所有字符进行迭代:
In [222]: list(map(float, txt[0]))
Traceback (most recent call last):
File "<ipython-input-222-47473c6c14f7>", line 1, in <module>
list(map(float, txt[0]))
ValueError: could not convert string to float: '.'
In [223]: list(txt[0])[:10]
Out[223]: ['0', '.', '0', '0', '0', '0', '0', '0', '0', '0']
但是如果您首先按照https://stackoverflow.com/a/66678555/901925
的建议在空间上分割线In [224]: list(map(float, txt[0].split()))
Out[224]: [0.0, 0.0]
或者对于几行(我更喜欢列表理解而不是地图):
In [225]: res = []
...: for dm in txt:
...: res.append([float(i) for i in dm.split()])
...:
In [226]: res
Out[226]: [[0.0, 0.0], [0.0, 0.0], [10.0, 0.5626957416534424]]