如何高效将jpg图片作为额外列加入汽车信息pandas数据框
优化属性提取代码
你原来的循环拆分写法确实冗余,直接用pandas批量拆分即可,代码简洁性和运行效率都更高:
import os import pandas as pd import numpy as np from PIL import Image # 配置路径 img_root = r"你的图片存放目录" # 筛选所有jpg文件,同时生成完整路径 car_files = [f for f in os.listdir(img_root) if f.lower().endswith(".jpg")] full_img_paths = [os.path.join(img_root, f) for f in car_files] # 定义属性列名,顺便补上最后3位唯一标识符的字段 attr_cols = [ "make", "model", "year", "msrp", "front_wheel_size", "sae_net_hp", "displacement", "engine_type", "width", "height", "length", "mpg", "drivetrain", "passenger_capacity", "doors", "body_style", "unique_id" ] # 批量拆分文件名生成属性表,不需要单独维护十几个列表 df = pd.DataFrame( [f.rsplit(".", 1)[0].split("_") for f in car_files], columns=attr_cols )
最高效添加图片列的方案
分两种场景按需选择:
优先推荐:存图片本地路径
这是性能开销最低、最通用的方案,不会让DataFrame变得臃肿,后续需要用图片时读路径加载即可,添加方式一行代码搞定:df["img_path"] = full_img_paths65000条数据可以瞬间完成添加,几乎没有额外内存占用。
特殊需求:存图片像素数据
如果你确实需要把图片内容直接存入DataFrame(比如后续直接用于模型训练,不想每次单独读文件),可以用apply批量加载,建议提前把图片缩放到你需要的尺寸,避免内存溢出:def load_resize_img(path, target_size=(224, 224)): img = Image.open(path).resize(target_size) # 可根据需求返回PIL对象/ numpy数组/ 二进制字符串 return np.array(img) df["img_data"] = df["img_path"].apply(load_resize_img)
内容的提问来源于stack exchange,提问作者Nish
相关产品推荐
相关产品推荐

