熊猫数据框-TypeError:类型为_io.TextIOWrapper的对象没有len()

时间:2020-01-25 22:05:20

标签: python pandas

我正在尝试整理我下载的数据集。目前,我有一个图像目录和一个带有这些图像值的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()

我不知道为什么会这样,有人可以帮忙吗?

1 个答案:

答案 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()