Pandas/Numpy 升级后 for-loop 不工作

for-loop not working after upgrade of Pandas/Numpy

我是 运行 一个 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 作品sheet(考虑导出到 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() 是 returns 数据帧的函数。

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 sheet 中写入任何内容。它工作正常并且 sheets 被添加得很好。 你能告诉我 excel 引擎有什么问题吗,我有 openpyxlxlsxwriter,虽然我没有同时使用它们。

我需要输出到一个 excel 文件中,其中包含相应 excel sheets

中的内容

我卸载了 XLSXWriter 并做了一些小的代码更改。 openpyxlXLSXWriter

之间似乎存在冲突
if:
    ...
    sheet = lane_spot[i-1][:-3]
    ...
else:
    ...
    sheet = lane_spot[i][:-3]
    ...

已修复!