为什么熊猫没有在Excel中创建新表?

时间:2019-03-07 23:02:14

标签: python pandas openpyxl

我有一个巨大的csv文件,其中包含价值一年的股票日内数据,因为它太大而无法分析,所以我想事先处理这些数据。

我想将其分解为12个excel文件(12个月),每个文件都有28-31个工作表/标签/页面,其中包含该日期的当日数据。因此,我准备了这些名为Stock-01,Stock-02到Stock-12的excel文件,此刻它们为空,等待数据由我的python代码添加。

在使用read_csv之后,我正在使用以下代码:

for index in indexs:
    name = "Stock_" + index.strftime("%y-%m-%d")

    work = data[data.index.date == index].copy()
    columnsTitles = ['Volume','Open','High','Low','Close']
    work = work.reindex(columns= columnsTitles)

    filepath = "Stock-{}.xlsx".format(index.strftime("%m"))
    writer = ExcelWriter(filepath, engine='openpyxl')
    work.to_excel(writer, index = True, sheet_name=name)
    writer.save()
    writer.close()

    del work

我的方法是,索引包含所有日期,因此使用索引运行整个过程,我选择了准备好的excel文件,使用日期(索引)附加了具有名称的工作表,并使用简单的to_excel函数直接复制了数据框。

但是,结果是,它只有一张纸,并且该纸具有最后的日期数据。 (一个可能的原因可能是该程序每次都在创建一个新的工作簿,而不是阅读现有的工作簿)

询问类似的question,但这正在另一种方法上。我想直接向excel写一个数据框,但是在这个问题上,使用xlsxwriter,我似乎无法做到,因为它仅接受str值。

2 个答案:

答案 0 :(得分:1)

之所以只有一个选项卡,是因为通过每次迭代,您将创建一个名为“ Stock-{}。xlsx”的新文件,其中包含一个选项卡。根据您的代码,您将最终得到多个excel工作表,或者将一个工作表重写多次。

在讨论后编辑:

df = pd.read_csv("D:/AmiBackupeSignal/AMGN.txt", index_col="Date/Time")

df.index = pd.to_datetime(df.index)

# get list of all unique days/months 
days = df.index.day.unique().sort_values()
months = df.index.month.unique().sort_values()

for month in months:
    filepath = "Stock-{}.xlsx".format(month)
    with pd.ExcelWriter(filepath) as writer:
        for day in days:
            name = "Stock_" + "-".join([str(df.index.year.unique()[0]), str(month), str(day)])

            # get data for that month/day
            # this will create 31 tab
            temp = df.loc[(df.index.month == month) & (df.index.day == day)]
            temp.to_excel(writer, index = True, sheet_name=name)

        writer.save()

答案 1 :(得分:0)

您可以做的是在for循环之前创建空白的excel文件。一旦那是excel书,您就可以使用

加载它
from openpyxl import load_workbook

book = load_workbook('CHANGE_THE_NAME.xlsx')

然后为循环中的每个作家对象将此书附加到书中

writer = pandas.ExcelWriter('CHANGE_THE_NAME.xlsx', engine='openpyxl') 
writer.book = book

之后,您可以使用to_excel在同一文件中写入新的工作表。我希望这回答了你的问题。