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

如何将可增删行的双列QTableWidget转为DataFrame以分析字符串

将QTableWidget内容转换为Pandas DataFrame的完整实现

我来帮你完善这个QTableWidget转DataFrame的函数,并且给出后续数据分析的示例,这样你就能轻松统计表格里的特定字符串了:

完整的转换函数

import pandas as pd
from PyQt5.QtWidgets import QTableWidgetItem

def dataframe_gen(self, table):
    num_rows = table.rowCount()
    num_cols = table.columnCount()
    
    # 从表格表头提取列名,替代手动定义的列名
    columns = [table.horizontalHeaderItem(col).text() for col in range(num_cols)]
    
    table_data = []
    for row in range(num_rows):
        row_data = []
        for col in range(num_cols):
            # 处理空单元格的情况,避免None引发报错
            item = table.item(row, col)
            if item is not None:
                row_data.append(item.text())
            else:
                # 用pd.NA更适合后续数据分析,也可以换成空字符串""
                row_data.append(pd.NA)
        table_data.append(row_data)
    
    # 转换为DataFrame并返回
    tmp_df = pd.DataFrame(table_data, columns=columns)
    return tmp_df

代码说明

  • 表头处理:通过horizontalHeaderItem自动获取表格的表头文本作为DataFrame的列名,不用手动硬编码,适配你表格的实际列名。
  • 空单元格兼容:如果表格里有未编辑的空单元格,table.item()会返回None,这里做了判断并填充pd.NA(适合后续过滤空值),你也可以根据需求换成空字符串。
  • 遍历逻辑:逐行逐列读取单元格内容,把所有数据整理成二维列表后,再转换为DataFrame,保证数据结构和表格完全对应。

使用示例(结合数据分析)

假设你的QTableWidget实例是self.table_widget,在需要统计分析的时候调用函数:

# 生成DataFrame
df = self.dataframe_gen(self.table_widget)

# 统计特定字符串出现的总次数
target_str = "你要统计的字符串"
# 遍历所有列,统计包含目标字符串的单元格数量
total_count = df.apply(lambda col: col.str.contains(target_str, na=False).sum()).sum()
print(f"目标字符串共出现 {total_count} 次")

# 也可以按列统计
col_count = df.apply(lambda col: col.str.contains(target_str, na=False).sum())
print("各列目标字符串出现次数:")
print(col_count)

额外优化建议

  • 如果表格里有数字类型的数据,可以在转换后做类型转换:
    # 比如将第二列转换为数值类型(errors='coerce'把无法转换的内容设为NaN)
    df.iloc[:, 1] = pd.to_numeric(df.iloc[:, 1], errors='coerce')
    
  • 如果你的表格支持批量编辑,建议在用户完成增删/编辑操作后再调用这个函数,确保获取到最新的表格数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:35:39