鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: laiyuanjie

求助一个续写excel表格的问题

[复制链接]
 楼主| 发表于 2024-3-31 19:32:42 | 显示全部楼层
FishC 发表于 2024-3-31 19:30
非常抱歉,给你带来困扰。这个错误是因为openpyxl库默认不允许向已存在的Sheet写入数据。可以将代码中 ...

    file_name = year + ".xlsx"
TypeError: can only concatenate list (not "str") to list
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-31 19:33:16 | 显示全部楼层
laiyuanjie 发表于 2024-03-31 19:32
file_name = year + ".xlsx"
TypeError: can only co ...


非常抱歉,我在代码中的一个错误。正确的代码是将`year`变量定义为列表,然后再连接为字符串。请修改代码中的`year = str(self.max).split("-")`这一行为`year = "-".join(str(self.max).split("-")[:2])`。修改后的代码如下所示:
import os
import pandas as pd
import openpyxl

class InsertCsv:
    def __init__(self):
        self.csv_path = os.path.join(os.getcwd(), "csv")
        
    def insert(self, df):
        self.file, self.min, self.max, self.sum = df
                
        year = "-".join(str(self.max).split("-")[:2])  # 提取年份作为文件名
        file_name = year + ".xlsx"
        file_path = os.path.join(self.csv_path, file_name)
        
        self.is_file_exist()
        
        if not os.path.isfile(file_path):
            # 文件不存在,创建新文件并写入数据
            self.file.to_excel(file_path, sheet_name="Sheet1", index=False, encoding="utf-8")
        else:
            # 文件已存在,读取原有数据并合并
            existing_data = pd.read_excel(file_path)
            new_data = pd.concat([existing_data, self.file], ignore_index=True)
            
            # 将合并后的数据写入文件
            with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
                new_data.to_excel(writer, sheet_name="Sheet1", index=False, encoding="utf-8")
                
    def is_file_exist(self):
        if not os.path.isdir(self.csv_path):
            os.makedirs(self.csv_path)

这次修改应该能够解决报错问题,同时能够按照年份将数据写入对应的Excel文件中。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-31 21:25:28 | 显示全部楼层
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

我的一个日期格式是这个。。。我要取它的年怎么取
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-31 21:25:36 | 显示全部楼层
laiyuanjie 发表于 2024-03-31 21:25
我的一个日期格式是这个。。。我要取它的年怎么取


如果你的日期格式是`2024-01`,你可以使用以下方法提取年份:
date = "2024-01"
year = date.split("-")[0]
print(year)
这样,`print(year)`的输出结果将为`2024`。你可以将这段代码集成到你的程序中以获取日期的年份。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-31 21:26:59 | 显示全部楼层
FishC 发表于 2024-3-31 21:25
如果你的日期格式是`2024-01`,你可以使用以下方法提取年份:这样,`print(year)`的输出结果将为`2024` ...

AttributeError: 'Timestamp' object has no attribute 'split'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-31 21:27:10 | 显示全部楼层
laiyuanjie 发表于 2024-03-31 21:26
AttributeError: 'Timestamp' object has no attribut ...


抱歉,我犯了一个错误。根据您的错误信息,看起来您使用的是`Timestamp`对象,而不是字符串对象,因此无法直接使用`split`方法。您可以尝试使用`year`属性来提取年份。请尝试以下代码:
date = pd.Timestamp("2024-01")
year = date.year
print(year)

这样,`print(year)`将输出`2024`,您可以将这段代码集成到您的程序中以获取日期的年份。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 12:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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