Python值处理数据时出错

2024-05-23 17:42:09 发布

您现在位置:Python中文网/ 问答频道 /正文

致任何人

在得到一组包含几个参数(波长和4斯托克斯参数)的数据后,我认为我已经正确地设置了所有的参数。However it keeps showing me this error。我知道波长值是数据字符串中仅有的一个小数点的值。所以我想通过插入float()我就可以清楚了。但我想我不是。到底是什么阻碍了程序解释值列表,特别是当我告诉它有一个十进制数时。你知道吗

代码方面,这里发生的事情是我用

import matplotlib.pyplot as plt
import numpy as np
import scipy.constants as c
from scipy.interpolate import spline

然后在一个文件中,我设置了一些数组

WL = np.array([])
SI = np.array([])
SQ = np.array([])
SU = np.array([])
SV = np.array([])

其中WL是测量波长(一些带小数点的值),S[I,Q,U,V](整数值)是stokes参数。然后我告诉python在我的计算机中哪里可以找到所说的数据,并定义谁是谁。你知道吗

with open('C:\\Users\\Schmidt\\Desktop\\Python\\Homework_4\\CoolStuffLivesHere\\stokes_profiles_0.txt') as f:
    for line in f:
        data=line.split(' ')
        WL = np.append(WL, data[0])
        SI = np.append(SI, data[1])
        SQ = np.append(SQ, data[2])
        SU = np.append(SU, data[3])
        SV = np.append(SV, data[4])

现在这是工作,没有抱怨。然而,当我要求这个程序

plt.plot(WL,SI)
plt.show()

表示它“无法将字符串转换为浮点”。所以我认为可行的方法是在字符串中的一组十进制值(记住波长是一个带十进制的值)周围实现浮点运算。你知道吗

with open('C:\\Users\\Schmidt\\Desktop\\Python\\Homework_4\\CoolStuffLivesHere\\stokes_profiles_0.txt') as f:
    for line in f:
        data=line.split(' ')
        WL = np.append(WL, float(data[0]))
        SI = np.append(SI, data[1])
        SQ = np.append(SQ, data[2])
        SU = np.append(SU, data[3])
        SV = np.append(SV, data[4])

然而,这会产生同样的错误。所以我不知所措,需要帮助。你知道吗


Tags: 数据importdata参数asnplinesq
1条回答
网友
1楼 · 发布于 2024-05-23 17:42:09

在处理数据时,你必须决定你对坏数据的宽容程度。例如,对于XML解析器,一个缺少的结束标记和整个文档都会被丢弃。在您的示例中,数据中有多余的空格和空行。如果您想对文档进行严格的格式化,那么您得到的错误是完全合理的失败。你知道吗

但是您可以检查您想要允许的条件,并稍微放宽formatig规则。在本例中,我考虑了字符串中的额外空格并允许空行。未拆分为5个字段的行将收到警告。你知道吗

# this should be at the top with your other imports
import re
# a regex that splits on any number of spaces
split_on_spaces = re.compile(" +").split

with open('C:\\Users\\Schmidt\\Desktop\\Python\\Homework_4\\CoolStuffLivesHere\\stokes_profiles_0.txt') as f:
    for line in f:
        data=split_on_spaces(line.strip())
        if len(data) == 0:
            # skip blank line
            continue
        if len(data) != 5:
            # warn on bad lines
            sys.stderr.write("BAD LINE: {}".format(repr(line))
            continue
        WL = np.append(WL, float(data[0]))
        SI = np.append(SI, data[1])
        SQ = np.append(SQ, data[2])
        SU = np.append(SU, data[3])
        SV = np.append(SV, data[4])

相关问题 更多 >