如何从目录中的多个热像仪CSV文件提取中心像素值并添加至DataFrame
解决提取CSV中心像素值并整合到DataFrame的问题
你已经成功搭建了包含所有CSV文件名的DataFrame,接下来只需要遍历每个文件,读取指定位置的中心像素值,再把这个值合并到原DataFrame里就完成目标了。这里要特别注意:Python的索引是从0开始计数的,你提到的坐标144×191,对应的应该是行索引143,列索引190(假设你的CSV文件每行对应热像仪的一行像素,共288行、每行383个像素值)。
下面是完整的实现方案,我会附带详细说明:
完整代码
import os import glob import numpy as np import pandas as pd # 设置工作目录到CSV文件所在路径 os.chdir("/Programming/Proj1/Code/Image_Data") # 获取目录下所有CSV文件名 file_extension = '.csv' all_filenames = glob.glob(f"*{file_extension}") # 创建存储文件名的初始DataFrame all_df = pd.DataFrame(all_filenames, columns=['Full_name']) # 定义函数:读取单个CSV的中心像素值 def get_center_pixel(file_path): # 用numpy读取纯数值的像素数据,比pandas更高效 pixel_data = np.loadtxt(file_path, delimiter=',') # 转换为0开始的索引:144→143,191→190 center_value = pixel_data[143, 190] return center_value # 给DataFrame添加新列,批量提取所有文件的中心像素值 all_df['Center_Pixel_Value'] = all_df['Full_name'].apply(get_center_pixel) # 查看处理后的结果 all_df.head()
关键细节说明
- 高效读取数据:用
np.loadtxt处理纯数值的像素CSV比pd.read_csv更节省内存、速度更快,适合批量处理大量文件。 - 索引转换:热像仪分辨率288×383对应numpy数组的形状是
(288, 383),所以第144行第191列的像素,必须用[143, 190]来索引,否则会取错位置。 - 批量处理逻辑:用
apply方法遍历DataFrame中的文件名列,自动调用提取函数,代码简洁易维护。
针对超大量文件的优化方案
如果你的CSV文件数量多达上千个,可以用并行处理来利用多核CPU加速:
from multiprocessing import Pool # 开启多进程并行处理 with Pool() as pool: all_df['Center_Pixel_Value'] = pool.map(get_center_pixel, all_df['Full_name'])
处理完成后,你会得到类似这样的结果:
| Full_name | Center_Pixel_Value |
|---|---|
| 2021-09-13_13-42-16.csv | 32.7 |
| 2021-09-13_13-42-22.csv | 33.2 |
| 2021-09-13_13-42-29.csv | 32.9 |
内容的提问来源于stack exchange,提问作者Tiago C.
相关产品推荐
相关产品推荐

