如何从DataFrame的列表中移除所有正负数值保留非数值元素
实现方案
核心逻辑是对DataFrame中每个存储列表的单元格做元素过滤,剔除所有数值类型元素(包含正负数、0,覆盖整数、浮点数类型),仅保留非数值内容。
步骤1:导入依赖库、读取数据
import pandas as pd import numbers # 替换为你本地的similarity.csv文件实际存储路径 df = pd.read_csv("similarity.csv")
步骤2:定义列表过滤函数
通过类型判断筛掉所有数值类元素:
def filter_num_from_list(input_list): # 仅保留非数值类型的元素 return [elem for elem in input_list if not isinstance(elem, numbers.Number)]
用给出的示例测试该函数:
- 输入:
[0, 'hi', 'hello', 'okay', -3] - 输出:
['hi', 'hello', 'okay'],完全匹配预期结果。
步骤3:批量处理DataFrame的两列列表数据
将过滤函数应用到需要处理的两个存储列表的列上即可,注意把代码里的列名替换成数据集里的实际列名:
# 替换为数据集里实际的两个列表列名 list_col_1 = "列名1" list_col_2 = "列名2" df[list_col_1] = df[list_col_1].apply(filter_num_from_list) df[list_col_2] = df[list_col_2].apply(filter_num_from_list)
特殊场景适配
如果列表里存在字符串格式存储的数值(比如'0'、'-2.5'这类内容),可以使用带异常捕获的过滤函数版本,把这类伪装成字符串的数值也一并剔除:
def filter_num_from_list(input_list): result = [] for elem in input_list: # 跳过原生数值类型 if isinstance(elem, numbers.Number): continue # 尝试将字符串转为数值,转换成功说明是数值类内容,跳过 try: float(elem) continue except (ValueError, TypeError): result.append(elem) return result
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

