如何将Pandas数据框中ENUM类型的字符串单元格转为列表?
解决方法
针对你的需求,核心是要把ENUM对应的字符串内容拆分并清理格式,而不是直接把整个字符串作为单个元素加入列表。以下是几种可行的实现方式:
方式一:在循环中处理每个ENUM行
直接修改你原来的循环逻辑,对row['Value']做拆分和格式清理:
import pandas as pd # 构造你的数据框 data = { 'Type': ['INT', 'INT', 'ENUM', 'HEX', 'ENUM', 'ENUM'], 'Value': ['0', '100', '"val1","val2","val3"', '0x0', '"val1","val2"', '1,4,3,8'] } df = pd.DataFrame(data) for index, row in df.iterrows(): if row['Type'] == 'ENUM': # 1. 去掉字符串首尾的引号(如果存在) cleaned_str = row['Value'].strip('"') # 2. 按逗号拆分字符串 raw_list = cleaned_str.split(',') # 3. 清理每个元素的引号,按需转换类型 enum_list = [item.strip('"') for item in raw_list] # 若ENUM值是纯数字,可转成int:enum_list = [int(item) for item in raw_list] print(enum_list) # 执行你的业务逻辑doSomething() # doSomething() # 无需手动clear,每次循环会生成新列表
运行后,每个ENUM行对应的列表会是:
["val1","val2","val3"](调用enum_list[0]返回val1)["val1","val2"]["1","4","3","8"](转int后为[1,4,3,8])
方式二:用Pandas的apply批量处理
如果需要把处理后的列表直接存入数据框,可用apply批量生成:
def process_enum(value): cleaned_str = value.strip('"') raw_list = cleaned_str.split(',') return [item.strip('"') for item in raw_list] # 新增一列存储处理后的列表 df['Processed_ENUM'] = df.apply( lambda row: process_enum(row['Value']) if row['Type'] == 'ENUM' else None, axis=1 ) # 查看ENUM行的处理结果 print(df[df['Type'] == 'ENUM']['Processed_ENUM'])
处理后的数据框会新增一列,直接存储每个ENUM行对应的标准列表。
关键说明
你之前的问题是直接把整个row['Value']字符串加入列表,导致列表仅含1个元素;现在通过split(',')拆分字符串,再清理每个元素的多余引号,就能得到正确的多元素列表。
内容的提问来源于stack exchange,提问作者chuachu
相关产品推荐
相关产品推荐

