如何移除pandas DataFrame中列表字符串的单引号
Pandas去除列表字段字符串外层单引号方案
场景说明
需要处理DataFrame的relations字段,移除列表内字符串外层包裹的单引号,原始数据与期望效果如下:
原始数据示例
name relations 0 mary ['andrew', 'jane'] 1 jack ['priscilla', 'mary'] 2 jason ['howard', 'jackie']期望输出效果
name relations 0 mary [andrew, jane] 1 jack [priscilla, mary] 2 jason [howard, jackie]
分场景实现
场景1:relations列存储的是原生Python列表对象
这种场景下看到的单引号是pandas默认打印时自动给字符串元素加的标识,并不是数据本身自带的内容,不需要修改原始数据,只要自定义展示格式即可:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'name': ['mary', 'jack', 'jason'], 'relations': [['andrew', 'jane'], ['priscilla', 'mary'], ['howard', 'jackie']] }) # 自定义列格式化规则,输出时自动去掉单引号 print(df.to_string( formatters={'relations': lambda item: f"[{', '.join(item)}]"} ))
这种方式不会破坏列的列表结构,后续做列表筛选、元素展开、成员判断等操作都不受影响。
场景2:relations列存储的是字符串格式的列表
如果列里的值是类似"['andrew', 'jane']"的字符串,单引号是字符串本身的内容,直接做字符串替换即可:
# 替换掉字符串内所有单引号 df['relations'] = df['relations'].str.replace("'", "")
如果后续需要把该列转为原生列表结构,替换完成后再做解析即可。
注意:不要为了消除展示的单引号直接把原生列表列强转为字符串,会丢失列表的结构化属性,影响后续数据处理。
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

