首页 > 解决方案 > 升级 Pandas/Numpy 后 for-loop 不起作用

问题描述

我正在运行一个 python 脚本,其基本思想是扫描目录中的文本文件,例如:

files = glob.glob("*.txt")
files
-------
output:
['name_6-076_01.txt',
 'name_6-077_00.txt',
 'name_6-077_01.txt',
 'name_6-078_00.txt',
 'name_6-078_01.txt',
 'name_6-079_00.txt']

请注意它有两个相同的*077*.txt条目(我有一些文件列表,甚至更多)。_00 and _01*078*.txt

我正在尝试将这些文件(来自*077*)放入单个 excel 工作表中(考虑导出到 excel)。

lane_spot = ['Spot_6-076_01', 'Spot_6-077_00', 'Spot_6-077_01', 'Spot_6-078_00', 'Spot_6-078_01', 'Spot_6-079_00']

spotlanes()是一个返回数据框的函数。

writer = pd.ExcelWriter(f'Summary_{datetime.now().strftime("%Y-%m-%d_%H%M%S")}.xlsx')

我在这方面很成功。但是升级到 Pandas(0.23.4 到 1.0.3)已经打乱了一切。

以下是对我有用的代码,没有任何问题:

for i in range(len(files)):
    try:
        if (files[i][:-7] == files[i-1][:-7]):
            sheet = lane_spot[i-1]
            lane = spotlanes(files[i])
            lane[f'{lane_spot[i]}'] = [f'{lane_spot[i]}', f'{lane_spot[i]}']
            lane.set_index(f'{lane_spot[i]}',append=True, inplace=True)
            lane.index = lane.index.swaplevel(0,1)
            lane = lane.rename_axis(['Spot','Method'])
            lane.to_excel(writer,sheet_name=f'{sheet}',index=True, startrow=3)
            writer.save()
        else:
            sheet = lane_spot[i]
            lane = spotlanes(files[i])
            lane[f'{lane_spot[i]}'] = [f'{lane_spot[i]}', f'{lane_spot[i]}']
            lane.set_index(f'{lane_spot[i]}',append=True, inplace=True)
            lane.index = lane.index.swaplevel(0,1)
            lane = lane.rename_axis(['Spot','Method'])
            lane.to_excel(writer,sheet_name=f'{sheet}',index=True)
            writer.save()
    except IndexError:
        print("EOF")

根据需要在外部测试相同的代码:

In [14]: for i in range(len(files)):
    ...:     try:
    ...:         if (files[i][:-7] == files[i-1][:-7]):
    ...:             print(f'sheet{i-1} appended', lane_spot[i])
    ...:         else:
    ...:             print(f'sheet{i}', lane_spot[i])
    ...:
    ...:     except IndexError:
    ...:         print("fo")
    ...:
    ...:
sheet0 Spot_6-076_01
sheet1 Spot_6-077_00
sheet1 appended Spot_6-077_01
sheet3 Spot_6-078_00
sheet3 appended Spot_6-078_01
sheet5 Spot_6-079_00
sheet5 appended Spot_6-079_01
sheet7 Spot_6-080_00
sheet7 appended Spot_6-080_01
sheet9 Spot_7-008_00
sheet9 appended Spot_7-008_01
sheet11 Spot_7-009_00

因此,基本上,在第一次迭代后它不会在 Excel 表中写入任何内容。它工作得很好,床单也得到了很好的补充。你能告诉我excel引擎是否有任何东西吗,我有openpyxl,也有xlsxwriter,虽然我没有同时使用它们。

我需要输出到一个excel文件中,其中包含相应的excel表中的内容

标签: pythonexcelpandasopenpyxlxlsxwriter

解决方案


我卸载了XLSXWriter并做了一些小的代码更改。看起来有冲突,openpyxlXLSXWriter

if:
    ...
    sheet = lane_spot[i-1][:-3]
    ...
else:
    ...
    sheet = lane_spot[i][:-3]
    ...

这个固定!


推荐阅读