解决ast.literal_eval转换Google Analytics数据集hits列字符串的语法错误
问题原因
ast.literal_eval() 仅支持解析Python原生的数据类型,你的字符串中包含了Numpy的array()结构,不属于Python原生类型,因此会触发语法错误。
方案1:报错兜底保留原字符串
如果你不需要用到array相关的数据,只需要加异常捕获逻辑即可,转换失败时直接返回原字符串:
import ast def safe_eval(x): try: return ast.literal_eval(x) except Exception: # 转换失败直接返回原字符串 return x df['hits'] = df['hits'].apply(safe_eval)
方案2:正确转换array结构为列表
如果你需要完整解析所有内容,可以先通过正则替换把array()结构转换为原生列表,再进行解析:
import ast import re def parse_hits(x): # 全局替换所有array(xxx, dtype=object)结构为xxx,转为Python原生列表 x_processed = re.sub(r'array\((.*?),\s*dtype=object\)', r'\1', x) try: return ast.literal_eval(x_processed) except Exception: return x df['hits'] = df['hits'].apply(parse_hits)
这个方案会把所有array格式自动替换为列表格式,保留所有原始数据的同时可以正常完成解析。
内容的提问来源于stack exchange,提问作者JohnDoe
相关产品推荐
相关产品推荐

