如何将.csv文件中的某列读取为元组列表?
解决方法
方法1:结合正则替换与ast.literal_eval
原字符串里的元素无引号(如a、b),直接用ast.literal_eval会报错,需先通过正则给无引号标识符添加引号,再解析为Python对象:
import pandas as pd import ast import re # 读取CSV文件 df = pd.read_csv("your_file.csv") # 定义转换函数 def convert_to_tuple_list(s): # 匹配括号/空格后的无引号标识符,添加双引号 s_quoted = re.sub(r'(?<=[\(\s])([a-zA-Z0-9_]+)(?=[\,\)\s])', r'"\1"', s) # 解析为元组列表 return ast.literal_eval(s_quoted) # 应用到目标列 df["tuplist"] = df["tuplist"].apply(convert_to_tuple_list)
处理后df["tuplist"][0]会变为[('a', 'b', 'c'), ('d', 'e', 'f'), ('x', 'y', 'z')],元组内元素均为字符串类型。
方法2:纯正则提取组装
若无需处理复杂嵌套结构,可直接用正则提取元素并手动组装元组列表:
import pandas as pd import re def convert_to_tuple_list(s): # 提取所有括号内的元素组 tuples_str = re.findall(r'\((.*?)\)', s) result = [] for t_str in tuples_str: # 拆分元素、去除空格后转为元组 elements = [elem.strip() for elem in t_str.split(',')] result.append(tuple(elements)) return result df = pd.read_csv("your_file.csv") df["tuplist"] = df["tuplist"].apply(convert_to_tuple_list)
注意事项
- 若元素包含逗号、特殊符号,需调整正则匹配规则适配场景;
- 优先选择方法1,
ast.literal_eval比原生eval更安全,且能兼容复杂嵌套格式。
内容的提问来源于stack exchange,提问作者thatsroughbuddy
相关产品推荐
相关产品推荐

