You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将QTableView中(含过滤后)的数据转换为Pandas Dataframe?

解决QTableView过滤后数据转Pandas Dataframe导出空白问题

你的代码导出空白文件核心是数据收集逻辑错误,加上几个细节处理不到位,修正方案如下:

原代码的问题

  1. p_data.append(rowRes)写在了内层列循环里,导致每遍历一列就把未完成的行数据加入一次,最终p_data的结构完全混乱,生成的Dataframe根本不是正常的表格数据。
  2. 只判断item != '',但model.data()返回的空值可能是None,会漏掉这类情况,导致部分数据缺失。
  3. 没有提取表头列名,导出的Excel不仅没有列名,Dataframe的结构也和原始数据不匹配。

修正后的代码

from PyQt5.QtCore import Qt
import pandas as pd

# 获取当前QTableView的代理模型(过滤后的模型)
proxy_model = self.PortTable.model()
# 从原始模型获取表头列名(保证和最初的Dataframe列名一致)
source_model = proxy_model.sourceModel()
columns = [source_model.headerData(col, Qt.Horizontal) for col in range(source_model.columnCount())]

p_data = []
# 遍历过滤后的每一行
for row in range(proxy_model.rowCount()):
    row_res = []
    # 遍历当前行的每一列
    for col in range(proxy_model.columnCount()):
        index = proxy_model.index(row, col)
        item = proxy_model.data(index)
        # 统一处理空值,避免Dataframe中出现None
        row_res.append(item if item is not None else "")
    # 整行数据收集完成后再加入到数据集
    p_data.append(row_res)

# 生成带列名的Dataframe
p_df = pd.DataFrame(p_data, columns=columns)

# 导出到Excel(不包含行索引)
with pd.ExcelWriter("filtered_data.xlsx") as writer:
    p_df.to_excel(writer, index=False)

关键说明

  • 直接操作代理模型(proxy_model)就能获取过滤后的行和列,不需要手动去匹配原始数据的行索引。
  • 通过sourceModel()获取原始模型的表头,保证导出的Excel列名和最初加载的Dataframe一致。
  • 把行数据的添加移到列循环外,确保每一行的所有列数据都收集完成后才存入数据集。
  • 处理None类型的空值,避免Dataframe出现无效值导致导出异常。

内容的提问来源于stack exchange,提问作者LucklyUnlucky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:45:26