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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:54:00