如何在以Excel为数据源的Pandas中处理UTF-8编码并导入MongoDB
报错原因
你之前检索到的UTF-8相关解决方案不适用于该问题,本次报错和编码无关:
- 你调用
df1 = df1.astype('string')将全列转为pandas专属的String类型后,空值会被处理为<NA>,对应pandas._libs.missing.NAType类型 - PyMongo的BSON编码器无法识别该非标准Python类型,因此抛出编码错误
解决方案
任选以下一种方法即可解决:
- 替换NAType为PyMongo支持的类型
在转字典插入前,新增一行代码将所有NAType替换为Python原生的None(对应MongoDB的null类型),或者替换为空字符串:
# 替换为None,适配MongoDB的null存储 df1 = df1.where(pd.notnull(df1), None) # 或者替换为空字符串,按需选择 # df1 = df1.fillna('')
后续插入逻辑保持不变即可。
- 直接使用你已生成的序列化结果
你的代码中已经通过df1.T.to_json()做了一次JSON序列化,该过程会自动把NAType转为标准null,你可以直接插入该结果,无需再调用df1.to_dict('records'):
records = json.loads(df1.T.to_json()).values() # 直接插入records即可,不用再次处理df out_col.insert_many(records)
内容的提问来源于stack exchange,提问作者user15780176
相关产品推荐
相关产品推荐

