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

将DataFrame中字符串格式数组转换为NumPy ndarray的方法

解决方案

方法1:字符串转数组(针对已存储的字符串格式数据)

如果你的DataFrame列中已经是带空格分隔、可能包含...的字符串格式像素数组,可以用以下安全的转换方法:

首先导入依赖库:

import ast
import numpy as np
import pandas as pd

编写转换函数:

def str_to_pixel_array(img_str):
    # 移除字符串中的省略号(如果是显示占位符)
    cleaned_str = img_str.replace('...', '')
    # 将空格替换为逗号,使字符串符合Python列表语法
    cleaned_str = cleaned_str.replace(' ', ',')
    # 用ast.literal_eval解析(比eval更安全,避免代码注入风险)
    pixel_list = ast.literal_eval(cleaned_str)
    # 转换为numpy数组
    return np.array(pixel_list)

应用到DataFrame列:

# 假设你的字符串列名为'pixel_str',新数组列名为'pixel_array'
df['pixel_array'] = df['pixel_str'].apply(str_to_pixel_array)

验证转换结果:

# 查看第一个转换后的数组形状
print(df['pixel_array'].iloc[0].shape)
# 输出示例:(224, 224, 3) 对应224x224的RGB图像

方法2:从源头避免字符串存储(推荐)

如果你的create_data函数是生成数据集的源头,建议直接存储numpy数组而非字符串,避免后续转换麻烦:

修改create_data函数:

import os
import cv2
import pandas as pd

def create_data(datadir):
    data_records = []
    # 遍历标签文件夹
    for label_name in os.listdir(datadir):
        label_dir = os.path.join(datadir, label_name)
        if not os.path.isdir(label_dir):
            continue
        # 遍历文件夹内的图像
        for img_filename in os.listdir(label_dir):
            img_path = os.path.join(label_dir, img_filename)
            # 读取图像为numpy数组(默认BGR,如需RGB可加[:, :, ::-1])
            img_array = cv2.imread(img_path)
            if img_array is not None:
                data_records.append({
                    'pixel_array': img_array,
                    'label': label_name
                })
    # 创建DataFrame
    df = pd.DataFrame(data_records)
    # 用pickle保存(避免csv将数组转为字符串)
    df.to_pickle('image_dataset.pkl')
    return df

读取保存的数据集:

df = pd.read_pickle('image_dataset.pkl')
# 直接使用pixel_array列的numpy数组即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:20:42