歌者文明清理员 发表于 2023-5-14 13:03:07

AttributeError: 'tuple' object has no attribute 'value'

代码:
from openpyxl import Workbook
from pandas import read_csv

df = read_csv('1.csv')

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

book.save("2.xlsx")

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

歌者文明清理员 发表于 2023-5-14 13:12:47

已经改了@isdkz @陶远航 @sfqxx
E:\Python\Learn\venv\Scripts\python.exe E:\Python\Learn\xlwings&douban\2.py
['Unnamed: 0', '电影名称', '电影类型']
Traceback (most recent call last):
File "E:\Python\Learn\xlwings&douban\2.py", line 9, in <module>
    sheet['A1:B1'] = list(df.columns)
File "D:\Python\lib\site-packages\openpyxl\worksheet\worksheet.py", line 318, in __setitem__
    self.value = value
AttributeError: 'tuple' object has no attribute 'value'

进程已结束,退出代码1

isdkz 发表于 2023-5-14 13:03:23

这个错误是因为元组类型没有 value 属性。在这个代码中,list(df.columns) 返回的是一个元组类型,而 sheet['A1:B1'] 需要的是一个列表类型。因此,需要将元组转换为列表,可以使用 list() 函数将其转换为列表类型:

sheet['A1:B1'] = list(df.columns)


修改后的代码如下所示:

from openpyxl import Workbook
from pandas import read_csv

df = read_csv('1.csv')

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

book.save("2.xlsx")

liuhongrun2022 发表于 2023-5-14 13:04:59

哪里报错

sfqxx 发表于 2023-5-14 13:06:05

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

有必要审查代码并确定元组的使用情况以及它们是否被正确访问。如果问题仍然存在,提供更多上下文和错误的回溯信息可能有助于更好地确定问题的源头。

陶远航 发表于 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"属性,而该属性不存在。但是,如果没有提供额外的上下文或跟踪信息,就很难确定代码中出现错误的具体位置。

sfqxx 发表于 2023-5-14 13:10:49

抄我签名有版权吗{:5_97:}

歌者文明清理员 发表于 2023-5-14 13:12:09

isdkz 发表于 2023-5-14 13:03
这个错误是因为元组类型没有 value 属性。在这个代码中,list(df.columns) 返回的是一个元组类型,而 s ...

我就是这么写的啊,而且list()切片返回元组?

陶远航 发表于 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)
这将解决关于设定元组对象值的错误。

歌者文明清理员 发表于 2023-5-14 13:15:58

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

同样错误

陶远航 发表于 2023-5-14 13:16:20

歌者文明清理员 发表于 2023-5-14 13:15
同样错误

那我也不到

歌者文明清理员 发表于 2023-5-14 13:18:25

sfqxx 发表于 2023-5-14 13:10
抄我签名有版权吗

fafujian,woxianemeile
(xunijimeishurufa)

isdkz 发表于 2023-5-14 13:20:38

错误发生在这一行:

sheet['A1:B1'] = list(df.columns)


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

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

from openpyxl import Workbook
from pandas import read_csv

df = read_csv('1.csv')

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

columns = list(df.columns)
for index, column_name in enumerate(columns):
    cell = sheet.cell(row=1, column=index+1)
    cell.value = column_name

book.save("2.xlsx")


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

sfqxx 发表于 2023-5-14 13:20:44

liuhongrun2022 发表于 2023-5-14 13:36:07

from openpyxl import Workbook
from pandas import read_csv

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

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

book.save("2.xlsx")

liuhongrun2022 发表于 2023-5-14 13:42:26

循环:
from openpyxl import Workbook
from pandas import read_csv

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

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

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

book.save("2.xlsx")

歌者文明清理员 发表于 2023-5-14 13:44:50

liuhongrun2022 发表于 2023-5-14 13:36


不是摆烂了吗{:10_256:}
页: [1]
查看完整版本: AttributeError: 'tuple' object has no attribute 'value'