如何在Pandas DataFrame中将逗号分隔值转换为整数列表
Pandas DataFrame:将逗号分隔数值转为整数列表的实现方案
刚好前段时间我也处理过类似的需求,给你整理了几个实用的实现方案,包括基础转换和异常处理的场景,附上输入输出示例,你可以直接参考:
输入与预期输出示例
输入DataFrame
假设我们有如下包含逗号分隔数值字符串的DataFrame:
import pandas as pd df = pd.DataFrame({ 'id': [1, 2, 3], 'num_str': ['10,20,30', '40,50', '60'] })
预期输出
我们需要将num_str列转换为整数类型的列表,最终结果如下:
id num_str num_list 0 1 10,20,30 [10, 20, 30] 1 2 40,50 [40, 50] 2 3 60 [60]
基础转换方案(适用于干净数据)
方案1:使用apply + 列表推导式
这是最直观的写法,适合数据格式规范、无脏数据的场景:
# 新增一列存储转换后的整数列表 df['num_list'] = df['num_str'].apply(lambda x: [int(num) for num in x.split(',')])
逻辑说明:
- 用
x.split(',')将每个逗号分隔的字符串拆分为字符串列表(比如"10,20,30"→["10","20","30"]) - 通过列表推导式遍历每个字符串元素,转换为整数类型
方案2:使用str.split + map
更简洁的链式写法,效果和方案1一致:
df['num_list'] = df['num_str'].str.split(',').map(lambda x: [int(i) for i in x])
逻辑说明:
- 先通过
str.split(',')将整个列批量转换为字符串列表的Series - 再用
map对每个列表中的元素执行整数转换
带异常处理的稳健方案(适用于存在脏数据的场景)
如果你的数据中可能存在空值、空字符串或者非数值字符(比如"10,a,30"),可以用带异常捕获的自定义函数来处理:
def str_to_int_list(s): # 处理空值或空字符串 if pd.isna(s) or s.strip() == '': return [] try: # 分割后转整数,同时处理元素前后可能存在的空格(比如"10, 20") return [int(num.strip()) for num in s.split(',')] except ValueError: # 遇到非数值内容时的处理逻辑,可根据需求调整(比如返回空列表/原字符串) return [] df['num_list'] = df['num_str'].apply(str_to_int_list)
逻辑说明:
- 先判断输入是否为空值或空字符串,直接返回空列表
- 尝试执行分割和转换操作,若遇到无法转整数的内容(比如字母),捕获
ValueError并返回空列表(你可以根据业务需求改成标记错误、保留原数据等)
验证结果
执行完上述代码后,打印DataFrame即可看到转换后的结果:
print(df)
内容的提问来源于stack exchange,提问作者D_S
相关产品推荐
相关产品推荐

