如何循环处理CSV单列多值,兼容空值/单值/双值场景且解决转换报错
问题原因
ValueError: could not convert string to float: '424 1901'
报错触发原因是双值场景下清理掉方括号后得到的是空格分隔的两个数字字符串,无法直接转换为浮点类型。
兼容三种场景的实现逻辑
核心思路是先对清理后的字符串做空格分割,根据分割后的列表长度处理不同场景:
- 分割后得到空列表:判定为空值,赋值为0
- 分割后得到长度为1的列表:取第一个元素按原有逻辑计算
- 分割后得到长度为2的列表:可根据业务需求选择计算逻辑(以下提供两种常见处理方式)
代码实现(双值求和场景示例)
with open('myfile.txt','w') as f: for i in range(len(df)): # 清理方括号+去除首尾所有空白,解决[ ]中间带空格的空值识别问题 itp = df.iloc[i, 1].replace('[', '').replace(']', '').strip() # 按任意空白字符分割,自动兼容单/双值,空字符串分割后得到空列表 num_list = itp.split() if not num_list: P = 0 else: # 遍历分割后的所有数值统一处理,单/双值都能适配 total = sum(int(float(num)) for num in num_list) P = total / 100 # 后续写入文件的逻辑补充在这里 # f.write(xxx)
代码实现(双值分别存储为列表场景示例)
如果业务需要保留两个独立的数值,可以修改为如下逻辑:
with open('myfile.txt','w') as f: for i in range(len(df)): itp = df.iloc[i, 1].replace('[', '').replace(']', '').strip() num_list = itp.split() if not num_list: P_list = [0] else: P_list = [int(float(num))/100 for num in num_list] # 后续可根据需求处理P_list,比如按指定分隔符拼接写入 # f.write(','.join(map(str, P_list)) + '\n')
内容的提问来源于stack exchange,提问作者Aqeel
相关产品推荐
相关产品推荐

