laiyuanjie 发表于 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

FishC 发表于 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(, 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 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-3-31 21:25:28

<class 'pandas._libs.tslibs.timestamps.Timestamp'>

我的一个日期格式是这个。。。我要取它的年怎么取

FishC 发表于 2024-3-31 21:25:36

laiyuanjie 发表于 2024-03-31 21:25
我的一个日期格式是这个。。。我要取它的年怎么取

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

laiyuanjie 发表于 2024-3-31 21:26:59

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

AttributeError: 'Timestamp' object has no attribute 'split'

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
页: 1 [2]
查看完整版本: 求助一个续写excel表格的问题