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

bitwise_and结果DataFrame无法打印及仅显示>1值的解决方法

问题解决指南

1. 修复DataFrame无法打印的问题

你的DataFrame无法正常打印,核心原因是扁平化后的图像特征列数过多(400×600×3=720000列),Pandas默认会截断大尺寸DataFrame的显示。你之前仅修改了NumPy的打印选项,但需要同时配置Pandas的显示参数:

添加以下代码到创建DataFrame之后:

import pandas as pd
# 配置Pandas显示所有列/行(按需调整)
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
# 避免单元格内容截断
pd.set_option('display.max_colwidth', None)

如果不需要显示全部72万列,可以设置仅显示部分列,比如:

# 仅显示前10列和最后1列(Target)
print(df.iloc[:, list(range(10)) + [-1]])

2. 仅打印DataFrame中值大于1的部分

由于bitwise_and运算后非椭圆区域像素值为0,你可以通过以下方式筛选出值大于1的部分:

方法1:保留DataFrame结构,替换无效值为NaN

# 复制原DataFrame,避免修改原始数据
filtered_df = df.copy()
# 仅处理数值列(排除最后一列Target)
numeric_cols = filtered_df.columns[:-1]
filtered_df[numeric_cols] = filtered_df[numeric_cols].where(filtered_df[numeric_cols] > 1)
print(filtered_df)

方法2:提取所有有效数值的单元格信息

如果需要只查看有有效数值(>1)的单元格位置和内容:

# 筛选出所有值>1的单元格,返回带索引的Series
non_zero_values = df[df > 1].stack()
print(non_zero_values)

方法3:保留至少有一个有效数值的行

如果只需要保留包含有效像素的记录:

# 筛选出至少有一个像素值>1的行
valid_rows = df[df.iloc[:, :-1].gt(1).any(axis=1)]
print(valid_rows)

优化后的完整代码片段

import os
import cv2
import numpy as np
import pandas as pd
import sys

flat_data_arr=[]
target_arr=[]
Type_of_Risk = ["低风险", "中风险", "高风险", "极高风险"] # 替换为你的实际风险类型列表
datadir = r'C:\Users\HRMini\MyProjects\PalmPredicion\Male\'

for i in Type_of_Risk:
    print(f'loading... Type_of_Risk : {i}')
    path=os.path.join(datadir,i)
    for img in os.listdir(path):
        img1 = np.zeros((400,600,3), np.uint8)
        img1 = cv2.ellipse(img1, (280, 190), (290, 60),160, 0, 360, (255, 255, 255), -1)
        img2 = cv2.imread(os.path.join(path,img))
        bitAnd = cv2.bitwise_and(img2, img1)
        # 可选:注释掉显示窗口以加快批量处理速度
        # cv2.imshow("img1", img1)
        # cv2.imshow("img2", img2)
        # cv2.imshow('bitAnd', bitAnd)
        # cv2.waitKey(1)
        # cv2.destroyAllWindows()
        flat_data_arr.append(bitAnd.flatten())
        target_arr.append(Type_of_Risk.index(i))
        print(f'loaded Type_of_Risk:{i} successfully')

flat_data=np.array(flat_data_arr)
target=np.array(target_arr)

# 配置Pandas显示选项,避免刷屏
pd.set_option('display.max_columns', 20)
pd.set_option('display.max_rows', 10)

df=pd.DataFrame(flat_data)
df['Target']=target

# 打印截断后的完整DataFrame
print("完整DataFrame(截断显示):")
print(df)

# 打印值大于1的筛选结果
print("\n值大于1的筛选结果:")
filtered_df = df.copy()
numeric_cols = filtered_df.columns[:-1]
filtered_df[numeric_cols] = filtered_df[numeric_cols].where(filtered_df[numeric_cols] > 1)
print(filtered_df)

内容的提问来源于stack exchange,提问作者Anura Thilak Bandara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:35:26