鱼C论坛

 找回密码
 立即注册
查看: 4722|回复: 16

[已解决]AttributeError: 'tuple' object has no attribute 'value'

[复制链接]
发表于 2023-5-14 13:03:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
  1. from openpyxl import Workbook
  2. from pandas import read_csv

  3. df = read_csv('1.csv')

  4. book = Workbook()
  5. sheet = book.active   # 当前工作表
  6. sheet['A1:B1'] = list(df.columns)[1:]

  7. book.save("2.xlsx")
复制代码

1.csv:
  1. ,电影名称,电影类型
  2. 0,名侦探柯南 灰原哀物语~黑铁的神秘列车~,2023 / 日本 / 剧情 动画 / 高山南 林原惠美
  3. 1,风再起时,2022 / 中国香港 中国大陆 / 剧情 动作 犯罪 / 翁子光 / 郭富城 梁朝伟
  4. 2,新大头儿子和小头爸爸5:我的外星朋友,2022 / 中国大陆 / 喜剧 动画 家庭 儿童 / 何澄 刘可欣 / 鞠萍 董浩
  5. 3,婚礼上我们讨厌的人,2022 / 美国 / 喜剧 / 克莱尔·斯坎伦 / 艾莉森·珍妮 辛希亚·阿戴-罗宾森
  6. 4,达荷美女战士,2022 / 美国 加拿大 / 剧情 动作 历史 / 吉娜·普林斯-拜斯伍德 / 维奥拉·戴维斯 图索·姆贝杜
  7. 5,银河英雄传说 Die Neue These 策谋 第1章,2022 / 日本 / 动画 / 多田俊介
  8. 6,优等生社团,2022 / 加拿大 美国 / 喜剧 爱情 / Oran Zegman / 安格瑞·赖斯 伽塔·马塔拉佐
复制代码
最佳答案
2023-5-14 13:20:38
错误发生在这一行:

  1. sheet['A1:B1'] = list(df.columns)[1:]
复制代码


在 openpyxl 中,对于像  sheet['A1:B1']  这样的多单元格范围赋值是不被允许的。这会导致你看到的 AttributeError: 'tuple' object has no attribute 'value'。

解决这个问题,你需要将列名单独写入每个单元格。尝试下面的代码:

  1. from openpyxl import Workbook
  2. from pandas import read_csv

  3. df = read_csv('1.csv')

  4. book = Workbook()
  5. sheet = book.active   # 当前工作表

  6. columns = list(df.columns)[1:]
  7. for index, column_name in enumerate(columns):
  8.     cell = sheet.cell(row=1, column=index+1)
  9.     cell.value = column_name

  10. book.save("2.xlsx")
复制代码


上面的代码将会把每个列名分别写入第一行的每个单元格中。 enumerate  函数返回了每个列名以及它的索引,然后我们使用  sheet.cell(row=1, column=index+1)  来获取对应的单元格,并把列名写入这个单元格中。请注意,在 openpyxl 中,行和列的索引都是从 1 开始的,所以我们在索引上加了 1。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-14 13:12:47 | 显示全部楼层
已经改了@isdkz @陶远航 @sfqxx
  1. E:\Python\Learn\venv\Scripts\python.exe E:\Python\Learn\xlwings&douban\2.py
  2. ['Unnamed: 0', '电影名称', '电影类型']
  3. Traceback (most recent call last):
  4.   File "E:\Python\Learn\xlwings&douban\2.py", line 9, in <module>
  5.     sheet['A1:B1'] = list(df.columns)[1:]
  6.   File "D:\Python\lib\site-packages\openpyxl\worksheet\worksheet.py", line 318, in __setitem__
  7.     self[key].value = value
  8. AttributeError: 'tuple' object has no attribute 'value'

  9. 进程已结束,退出代码1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:03:23 | 显示全部楼层
这个错误是因为元组类型没有 value 属性。在这个代码中,list(df.columns)[1:] 返回的是一个元组类型,而 sheet['A1:B1'] 需要的是一个列表类型。因此,需要将元组转换为列表,可以使用 list() 函数将其转换为列表类型:
  1. sheet['A1:B1'] = list(df.columns)[1:]
复制代码


修改后的代码如下所示:
  1. from openpyxl import Workbook
  2. from pandas import read_csv
  3. df = read_csv('1.csv')
  4. book = Workbook()
  5. sheet = book.active  # 当前工作表
  6. sheet['A1:B1'] = list(df.columns)[1:]
  7. book.save("2.xlsx")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:04:59 | 显示全部楼层
哪里报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:06:05 | 显示全部楼层
错误信息“AttributeError:'tuple' object has no attribute 'value'”说明尝试访问元组对象的'value'属性,但该属性不存在。代码可能试图使用'.value'语法为元组元素赋值或从元组中提取值,但这只适用于某些类型的对象,例如电子表格中的单元格。

有必要审查代码并确定元组的使用情况以及它们是否被正确访问。如果问题仍然存在,提供更多上下文和错误的回溯信息可能有助于更好地确定问题的源头。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:09:59 | 显示全部楼层
这段代码导入了openpyxl和pandas模块,然后把名为"1.csv"的CSV文件中的数据读入到一个叫做"df"的pandas DataFrame对象中。接下来,创建了一个空Excel工作簿对象“book”,并向其添加了一个名为“sheet”的新工作表。然后,在工作表的第一行(省略了第一列)上写入了DataFrame的列标题,并将生成的工作簿对象保存为名为"2.xlsx"的Excel文件。

出现"AttributeError: 'tuple' object has no attribute 'value'"的错误消息表明代码可能试图访问元组对象的"value"属性,而该属性不存在。但是,如果没有提供额外的上下文或跟踪信息,就很难确定代码中出现错误的具体位置。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:10:49 | 显示全部楼层
抄我签名有版权吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-14 13:12:09 | 显示全部楼层
isdkz 发表于 2023-5-14 13:03
这个错误是因为元组类型没有 value 属性。在这个代码中,list(df.columns)[1:] 返回的是一个元组类型,而 s ...

我就是这么写的啊,而且list()切片返回元组?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:14:32 | 显示全部楼层
歌者文明清理员 发表于 2023-5-14 13:12
已经改了@isdkz @陶远航 @sfqxx

这是一个使用openpyxl和pandas库读取CSV文件并将其写入Excel文件的Python代码。读取csv时使用pandas的read_csv()方法,然后将读取到的数据写入Excel表格。代码在第9行遇到了错误,因为代码尝试向元组对象中设置数据,而元组没有'value'属性,所以出现了'AttributeError'.

你需要将元组转换为列表或其他可变的数据结构才能在Excel表格中写入它们。您可以在代码的第9行周围添加一个list()函数来将元组转换为列表,如下所示:
sheet['A1:B1'] = list(df.columns[1:])
这将解决关于设定元组对象值的错误。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-5-14 13:15:58 | 显示全部楼层
陶远航 发表于 2023-5-14 13:14
这是一个使用openpyxl和pandas库读取CSV文件并将其写入Excel文件的Python代码。读取csv时使用pandas的rea ...

同样错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:16:20 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-14 13:18:25 | 显示全部楼层
sfqxx 发表于 2023-5-14 13:10
抄我签名有版权吗

fafujian,woxianemeile
(xunijimeishurufa)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:20:38 | 显示全部楼层    本楼为最佳答案   
错误发生在这一行:

  1. sheet['A1:B1'] = list(df.columns)[1:]
复制代码


在 openpyxl 中,对于像  sheet['A1:B1']  这样的多单元格范围赋值是不被允许的。这会导致你看到的 AttributeError: 'tuple' object has no attribute 'value'。

解决这个问题,你需要将列名单独写入每个单元格。尝试下面的代码:

  1. from openpyxl import Workbook
  2. from pandas import read_csv

  3. df = read_csv('1.csv')

  4. book = Workbook()
  5. sheet = book.active   # 当前工作表

  6. columns = list(df.columns)[1:]
  7. for index, column_name in enumerate(columns):
  8.     cell = sheet.cell(row=1, column=index+1)
  9.     cell.value = column_name

  10. book.save("2.xlsx")
复制代码


上面的代码将会把每个列名分别写入第一行的每个单元格中。 enumerate  函数返回了每个列名以及它的索引,然后我们使用  sheet.cell(row=1, column=index+1)  来获取对应的单元格,并把列名写入这个单元格中。请注意,在 openpyxl 中,行和列的索引都是从 1 开始的,所以我们在索引上加了 1。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:20:44 | 显示全部楼层

六六大顺

六六大顺
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-5-14 13:36:07 | 显示全部楼层
  1. from openpyxl import Workbook
  2. from pandas import read_csv

  3. df = read_csv('1.csv',encoding='gbk')

  4. book = Workbook()
  5. sheet = book.active   # 当前工作表
  6. sheet['A1'] = list(df.columns)[1]
  7. sheet['B1'] = list(df.columns)[2]

  8. book.save("2.xlsx")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-14 13:42:26 | 显示全部楼层
循环:
  1. from openpyxl import Workbook
  2. from pandas import read_csv

  3. df = read_csv('1.csv', encoding='gbk')

  4. book = Workbook()
  5. sheet = book.active   # 当前工作表

  6. for i, col in enumerate(df.columns[1:3]):
  7.     sheet.cell(row=1, column=i+1, value=col)

  8. book.save("2.xlsx")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-14 13:44:50 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-28 20:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表