列表中存在空字符串的值的类型转换

2024-10-03 00:22:17 发布

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

array = [{'@MeasurementDateGMT': '2017-02-25 00:00:00',
          '@SpeciesCode': 'CO',
          '@Value': '0.3'},
         {'@MeasurementDateGMT': '2017-02-25 01:00:00',
          '@SpeciesCode': 'CO',
          '@Value': '0.3'}....}]

try:
    pm10 = [float(d['@Value']) for d in array if d['@SpeciesCode'] == 'PM10']
except ValueError:
    pm10 = [''] * 24

我正在使用jsonapi中的数据在highcharts中进行绘图,因此我需要将字符串中的值转换为float。问题是,在只有一个空字符串的情况下,偶尔会出现缺少值的情况。这会导致ValueError,这就是我需要try/except块的原因

如果只缺少几个值,则当前需要替换整个数据集(使用except子句),以避免浮点转换的ValueError

对于这样的列表:

['3.4', '', '4.0']

我需要一个这样的清单:

[3.4, '', 4.0]

如何使浮点转换只在包含值的字符串上而不在空字符串上进行


Tags: 数据字符串forvalue情况floatarray浮点
2条回答

that there are occasional missing values where there is just an empty string.

如果我理解正确,以下简单条件应符合您的要求:

# the example was slightly modified to show empty strings proccessing
array = [{'@MeasurementDateGMT': '2017-02-25 00:00:00',
          '@SpeciesCode': 'PM10',
          '@Value': '0.3'},
         {'@MeasurementDateGMT': '2017-02-25 01:00:00',
          '@SpeciesCode': 'PM10',
          '@Value': ''},
         {'@MeasurementDateGMT': '2017-02-25 01:00:00',
          '@SpeciesCode': 'PM10',
          '@Value': '0.5'}]

pm10 = [float(d['@Value']) if d['@Value'].strip() else '' for d in array if d['@SpeciesCode'] == 'PM10']
print(pm10)

输出:

[0.3, '', 0.5]

如果d['@Value']"",它会附加一个空str

#adds d['@Value'] only if its a empty str
pm10 = [d['@Value'] if d['@Value'] == '' else float(d['@Value']) for d in array if d['@SpeciesCode'] == 'PM10']

例如:

array = [{'@MeasurementDateGMT': '2017-02-25 00:00:00',
          '@SpeciesCode': 'CO',
          '@Value': '0.3'},
         {'@MeasurementDateGMT': '2017-02-25 01:00:00',
          '@SpeciesCode': 'PM10',
          '@Value': '0.5'},
         {'@MeasurementDateGMT': '2017-02-25 01:00:00',
          '@SpeciesCode': 'PM10',
          '@Value': ''},
         {'@MeasurementDateGMT': '2017-02-25 01:00:00',
          '@SpeciesCode': 'PM10',
          '@Value': '3.5'}]


pm10 = [d['@Value'] if d['@Value'] == '' else float(d['@Value']) for d in array if '@SpeciesCode' in d.keys() if d['@SpeciesCode'] == 'PM10']

输出为:

[0.5, '', 3.5]

相关问题 更多 >