pandas导入Excel数据到SQLite时如何将管道符列转嵌套列表存储
调整方案
预处理逻辑
读取Excel后,先对B、C、D三列做格式转换:将单元格内用管道符|分隔的多个取值,拼接为[['值1'],['值2']]格式的字符串,其余列保持原样直接写入SQLite。
修改后的完整代码
def on_pushButton_import_pressed(self): '''import eamena excel file into HFF System''' conn = Connection() conn_str = conn.conn_str() try: EXCEL_FILE_NAME = self.lineEdit_path_excel.text() wb = pd.read_excel(EXCEL_FILE_NAME, skiprows=2) # 新增:需要做格式转换的目标列 convert_cols = ['B', 'C', 'D'] # 定义单元格格式转换规则 def format_cell(val): # 先处理空单元格场景 if pd.isna(val): return "" # 拆分管道符分隔的取值,过滤空内容、去除前后空白 items = [i.strip() for i in str(val).split('|') if i.strip()] # 拼接为要求的嵌套列表字符串格式 return f"[{', '.join([f"['{item}']" for item in items])}]" # 对目标列批量应用转换规则 wb[convert_cols] = wb[convert_cols].applymap(format_cell) wb.to_sql('eamena_table', conn_str, if_exists='append', index=False) except Exception as e: QMessageBox.warning(self, "Error", str(e), QMessageBox.Ok)
补充说明
- 自动兼容纯单值单元格场景(比如B列的
ee会直接转为[['ee']],完全匹配示例要求) - 空单元格会自动转为空字符串存储,不会生成
[['nan']]这类异常值 - 如果单元格内容本身包含单引号,可调整转换规则避免SQL语法冲突:把
f"['{item}']"改为f"['{item.replace("'", "''")}']",符合SQLite的字符串转义规范 - 原有Excel读取参数、数据库连接逻辑完全保留,不需要修改其他业务代码
内容的提问来源于stack exchange,提问作者enzo cocca
相关产品推荐
相关产品推荐

