Python Pandas导入Excel:去除列表类单元格值的多余引号
解决Pandas读取Excel后部分单元格值带多余引号的问题
问题场景
将Excel数据导入DataFrame后,整体显示正常,但查询单个单元格时,analysis_duration这类形似列表的单元格值会被包裹在单引号中,需要去除这些多余引号;而字符串类型值的引号属于正常现象,无需处理。
原始Excel数据(已翻译英文内容)
parameter customer1 analysis 1 analysis_name 月度服务分析 analysis_duration [2022-08-23, 2022-11-02] analysis_numcheck 1 analysis_dupcolumns 1
当前问题输出
c1df = pd.read_excel('customer1_data.xlsx') c1df.set_index('parameter',inplace=True) print(c1df.loc['analysis']) # 输出:1 print(c1df.loc['analysis_duration']) # 输出:'[2022-08-23, 2022-11-02]'(存在多余引号) print(c1df.loc['analysis_name']) # 输出:'月度服务分析'(字符串引号正常)
解决方案
问题根源是Excel中[xxx, xxx]格式的内容被Pandas识别为字符串类型,打印时会自动添加单引号。可以用ast.literal_eval将字符串解析为对应的Python列表对象。
方法一:读取后单独处理目标行
import pandas as pd import ast # 读取数据并设置索引 c1df = pd.read_excel('customer1_data.xlsx') c1df.set_index('parameter', inplace=True) # 解析analysis_duration对应的字符串为列表 c1df.loc['analysis_duration', 'customer1'] = ast.literal_eval(c1df.loc['analysis_duration', 'customer1']) # 验证结果 print(c1df.loc['analysis']) # 输出:1 print(c1df.loc['analysis_duration']) # 输出:[2022-08-23, 2022-11-02] print(c1df.loc['analysis_name']) # 输出:'月度服务分析'
方法二:读取时批量处理(推荐)
如果存在多个类似格式的单元格,可自定义转换器,在读取Excel阶段自动解析:
import pandas as pd import ast def parse_list_string(value): # 判断是否为符合列表格式的字符串 if isinstance(value, str) and value.startswith('[') and value.endswith(']'): return ast.literal_eval(value) return value # 读取时指定转换器处理customer1列 c1df = pd.read_excel('customer1_data.xlsx', converters={'customer1': parse_list_string}) c1df.set_index('parameter', inplace=True) # 验证结果 print(c1df.loc['analysis_duration']) # 输出:[2022-08-23, 2022-11-02]
说明
ast.literal_eval是安全的解析工具,仅能解析合法的Python字面量(列表、字典、元组等),不会执行恶意代码。- 字符串类型的值打印时带单引号是Python的默认行为,属于正常现象,无需额外处理。
内容的提问来源于stack exchange,提问作者Mainland
相关产品推荐
相关产品推荐

