You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历列表内函数拆分数据项?Python数据处理求助

问题解决:遍历拆分CSV数据行失败

问题背景

从指定URL下载文件并读取为行列表,目标是循环拆分所有数据项。已实现表头拆分,编写了parse_values函数处理单条数据,但遍历调用该函数的代码未生效;此前尝试的循环会将数据按字符拆分。

下载的原始数据示例:

['amount,duration,rate,down_payment\n', '100000,36,0.08,20000\n', '200000,12,0.1,\n', '628400,120,0.12,100000\n', '4637400,240,0.06,\n', '42900,90,0.07,8900\n', '916000,16,0.13,\n', '45230,48,0.08,4300\n', '991360,99,0.08,\n', '423000,27,0.09,47200']

问题根源

  1. 循环位置错误:原代码中遍历的for循环写在了parse_values函数的return语句之后,函数执行到return就会终止,循环根本不会被执行。
  2. 遍历范围局限:原循环硬编码了(1,2,3),只能处理前3条数据行,无法覆盖所有数据;如果之前错误地遍历了字符串(比如直接遍历file1_lines的元素而不是索引),就会把每行字符串按字符拆分。

修正后的代码

import os
import urllib.request

url1 = 'https://gist.githubusercontent.com/aakashns/257f6e6c8719c17d0e498ea287d1a386/raw/7def9ef4234ddf0bc82f855ad67dac8b971852ef/loans1.txt'

os.makedirs('./data', exist_ok=True) # 创建data文件夹
urllib.request.urlretrieve(url1,'./data/datos1.txt')

with open ('./data/datos1.txt') as file1:
    file1_lines = file1.readlines()

    print("OUR DATA\n")
    print(file1_lines)

# ------拆分表头-----
print("\n拆分后的表头:\n")
def titles(header_title):
    return header_title.strip().split(',')

headers = titles(file1_lines[0])
print(headers)

# ------拆分数据项-----
print("\n拆分后的数据项:\n")
def parse_values(data1):
    values = []
    for i in data1.strip().split(','):
        if i == '':
            values.append(0.0)
        else:
            try:
                values.append(float(i))
            except ValueError:
                values.append(i)
    return values

# 遍历所有数据行(从索引1开始,跳过表头)
for item in range(1, len(file1_lines)):
    new_data = parse_values(file1_lines[item])
    print(new_data)

关键修改说明

  • 将遍历循环移到parse_values函数外部,确保函数执行完后能触发循环。
  • 使用range(1, len(file1_lines))遍历所有数据行的索引,从1开始跳过表头,覆盖所有数据。
  • 保留了parse_values函数中处理空值和类型转换的逻辑,确保空值转为0.0,数值转为浮点数。

内容的提问来源于stack exchange,提问作者Antonio delasheras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:53:24