如何从含空列表和单值列表的Pandas DataFrame中提取值转整数
解决方案
方法1:通用兼容处理(适配混合字符串/列表类型)
适合SysNum列同时存在JSON格式字符串和原生Python列表的场景:
import pandas as pd import json # 示例数据初始化 data = {'Name': ['BN #1', 'HHC', 'A comp', 'B comp', 'BN #2', 'HHC', 'A comp', 'B comp'], 'SysNum': ['["1"]', [], [], [], '["2"]', [], [], []] } df = pd.DataFrame(data) def parse_sysnum(val): # 字符串格式先转Python列表 if isinstance(val, str): val = json.loads(val) # 非空列表取首元素转整数,空列表返回缺失值 return int(val[0]) if val else pd.NA df['SysNum_Int'] = df['SysNum'].apply(parse_sysnum)
生成的SysNum_Int列为Pandas可空整数类型Int64,直接调用df['SysNum_Int'].max()即可获取最大值。
方法2:向量化高性能处理(适合超大型DataFrame)
利用正则提取避免逐行apply,性能提升显著,无需考虑原数据是字符串还是列表类型:
# 统一转为字符串后提取双引号包裹的数字,转可空整数类型 df['SysNum_Int'] = df['SysNum'].astype(str).str.extract(r'"(\d+)"').astype('Int64')
效果验证
两种方法处理后得到的SysNum_Int列输出一致:
0 1 1 <NA> 2 <NA> 3 <NA> 4 2 5 <NA> 6 <NA> 7 <NA> Name: SysNum_Int, dtype: Int64
最大值查询df['SysNum_Int'].max()返回结果为2,符合预期。
内容的提问来源于stack exchange,提问作者JakeP
相关产品推荐
相关产品推荐

