我正在尝试整理我下载的数据集。目前,我有一个图像目录和一个带有这些图像值的Excel电子表格。我试图将它们组合成一个数据帧,其中一列用于图像文件名,另一列用于实际文件。这是我当前拥有的代码:
for filename in os.listdir("C:\\Users\\arnav\\Dataset\\Images"):
new_filename = filename
if(filename[0] == '.'):
new_filename = filename[2:]
picture = open(new_filename)
filename_file.loc[filename_file['Filename'] == new_filename,'File'] = picture
filename_file
数据帧有5500行,共有2列,一列用于文件名,一列用于文件。我设法将文件名加载到其中,因此现在File
列的全零。当我运行循环时,出现此错误:
Traceback (most recent call last):
File "data.py", line 16, in <module>
filename_file.loc[filename_file['Filename'] == new_filename,'File'] = picture
File "C:\Users\arnav\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 190, in __setitem__
self._setitem_with_indexer(indexer, value)
File "C:\Users\arnav\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 604, in _setitem_with_indexer
elif can_do_equal_len():
File "C:\Users\arnav\Anaconda3\lib\site-packages\pandas\core\indexing.py", line 554, in can_do_equal_len
values_len = len(value)
TypeError: object of type '_io.TextIOWrapper' has no len()
我不知道为什么会这样,有人可以帮忙吗?
答案 0 :(得分:1)
您正在尝试为图片文件分配文件处理程序,由于熊猫使用len()
进行内部检查,该处理程序失败。如果要将实际文件内容分配给File
列中的单元格,则必须使用picture.read()
。
旁注:在从Python中读取文件时,您可能想使用上下文管理器,否则会留下很多未关闭的IO对象。
for filename in os.listdir("C:\\Users\\arnav\\Dataset\\Images"):
new_filename = filename
if(filename[0] == '.'):
new_filename = filename[2:]
with open(new_filename, encoding='utf-8') as picture:
filename_file.loc[filename_file['Filename'] == new_filename, 'File'] = picture.read()