如何使用Python遍历CSV文件并提取指定列生成结构化字典
问题原因
你读取到全为nan的核心问题有2个:
- 分隔符配置错误:你的CSV文件使用分号
;作为字段分隔符,但代码里设置的sep='\s+'是按空白字符分割,完全匹配不到分隔规则,导致所有字段读入后全部错位 - 读取逻辑不完善:直接跳过前6行的方式没有处理文件中间的空行、重复表头行、无关信息行,进一步干扰了数据读取,同时还丢失了前2行存储的姓名信息
解决方法
针对这种非标准格式的CSV,我们可以分两步处理:先提取头部的姓名信息,再过滤清洗中间的测量数据,最终组装成要求的字典结构,完整代码如下:
import pandas as pd import csv file_path = "替换为你的CSV文件路径" # 初始化结果字典 res = { "last_name": "", "first_name": "", "measurements": [] } # 第一步:读取前2行提取姓名信息 with open(file_path, "r", encoding="utf-8") as f: reader = csv.reader(f, delimiter=";") # 跳过第一行的姓名表头 next(reader) # 读取第二行的姓名数据 name_row = next(reader) res["last_name"] = name_row[0].strip() res["first_name"] = name_row[1].strip() # 第二步:读取清洗测量数据 df = pd.read_csv( file_path, sep=";", skiprows=6, usecols=["Index", "Date", "Reading"], dtype=str ) # 过滤无效行:去掉非数字Index的重复表头行、空行、Reading为空的行 df_clean = df[ df["Index"].str.isnumeric() & df["Reading"].notna() & (df["Reading"].str.strip() != "") ] # 组装测量数据列表,若要匹配示例保留date后的冒号,把key改为`date:`即可 res["measurements"] = df_clean.apply( lambda x: {"date": x["Date"].strip(), "reading": x["Reading"].strip()}, axis=1 ).tolist() print(res)
运行后输出的结构就和你要求的完全一致。
内容的提问来源于stack exchange,提问作者lr_optim
相关产品推荐
相关产品推荐

