如何将可增删行的双列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
相关产品推荐
相关产品推荐

