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

Python如何在CSV单列存储多变量并读取为列表

读取CSV多值列并转换为列表的实现方案

问题背景

使用Python开发节点连接地图功能,需读取包含Name、Previous(前驱节点)、Next(后继节点)三列的CSV文件,将列内存储的多值解析为列表结构。支持pandas方案和纯Python无依赖方案,可调整CSV存储格式或读取逻辑。
示例CSV对应期望输出:

alpha, ['one', 'two'], ['three']
beta, ['four'], ['five']
charlie, ['six'], ['seven', 'eight']

原有代码的核心问题是:read_csv读取到的多值列是完整字符串,未做拆分操作,因此只能得到单元素列表。


方案1:沿用空格分隔多值的CSV格式

如果所有节点名本身不包含空格,不需要修改原有CSV,读取后按空格拆分即可。
CSV格式示例:

Name,Previous,Next
Alpha,one two,Three
Beta,four,five
Charlie,six,seven eight

pandas实现代码

import pandas as pd
df = pd.read_csv("connections.csv")
# 按空格拆分多值列为列表
df["Previous"] = df["Previous"].str.split()
df["Next"] = df["Next"].str.split()

# 按期望格式输出
for _, row in df.iterrows():
    print(f"{row['Name'].lower()}, {row['Previous']}, {row['Next']}")

纯Python实现(无pandas依赖)

import csv
res = []
with open("connections.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        prev = row["Previous"].split()
        next_n = row["Next"].split()
        res.append((row["Name"].lower(), prev, next_n))

# 打印结果
for item in res:
    print(f"{item[0]}, {item[1]}, {item[2]}")

方案2:使用标准CSV双引号包裹多值格式(推荐)

如果节点名可能包含空格、特殊字符,优先使用该格式,兼容性更强,不会出现分隔符冲突。
CSV格式示例(多值用双引号包裹,内部用逗号分隔):

Name,Previous,Next
Alpha,"one,two",Three
Beta,four,five
Charlie,six,"seven,eight"

pandas实现代码

read_csv默认自动识别引号包裹的字段,读取后按逗号拆分即可:

import pandas as pd
df = pd.read_csv("connections.csv")
# 按逗号拆分多值列为列表,加strip()去除元素前后多余空格
df["Previous"] = df["Previous"].apply(lambda x: [i.strip() for i in x.split(",")])
df["Next"] = df["Next"].apply(lambda x: [i.strip() for i in x.split(",")])

纯Python实现(无pandas依赖)

Python内置csv模块默认支持解析引号包裹的字段:

import csv
res = []
with open("connections.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        prev = [i.strip() for i in row["Previous"].split(",")]
        next_n = [i.strip() for i in row["Next"].split(",")]
        res.append((row["Name"].lower(), prev, next_n))

注意事项

  • 代码中的列名需要和CSV表头的大小写完全一致,否则会触发KeyError
  • 空格分隔方案仅适用于节点名本身不含空格的场景,否则会出现错误拆分
  • 若CSV内容存在多余空格,拆分时建议对每个元素做strip()处理,避免列表元素带无意义的空白字符
  • 双引号+逗号分隔是CSV的标准多值存储格式,兼容所有CSV解析工具,优先选择该格式存储多值数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:03:19