如何遍历列表内函数拆分数据项?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']
问题根源
- 循环位置错误:原代码中遍历的
for循环写在了parse_values函数的return语句之后,函数执行到return就会终止,循环根本不会被执行。 - 遍历范围局限:原循环硬编码了
(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
相关产品推荐
相关产品推荐

