Ошибка говорит вам очень простое объяснение того, почему она не работает -> x
это кортеж и не a строка ! Лично я бы попытался распечатать его и убедиться, что это действительно то, что я хочу:
for x in grouped:
print(x)
Это покажет вам что-то вроде (item0, item1, item2, ..., itemN)
Теперь вы можете выбрать, какой элемент является искомой строкой:
for x in grouped:
df.to_excel('test files/ranking_{}.xlsx'.format(x[0]), index=False)
Где x[0]
скажет ему получить item0
(в идеале - строку, но вы также можете привести ее к одной, как показано ниже). В качестве альтернативы вы можете создать имя файла, например test files/ranking_(item0, item1, item2, ..., itemN).xlsx
(используя строковое представление кортежа), например:
for x in grouped:
df.to_excel('test files/ranking_{}.xlsx'.format(x), index=False)
Следует отметить, что метод .format()
неявно вызывает функцию str()
, когда это необходимо, хотя (поскольку .format()
отличается от конкатенации и обычно намного чище для чтения, быстрее для запуска и просто вообще лучше чем конкатенация). Если вы действительно хотите использовать конкатенацию, вам просто нужно сделать из нее строку:
for x in grouped:
df.to_excel('test files/ranking_' + str(x) + '.xlsx', index=False)
Но, пожалуйста, перейдите на .format()
!! Если у вас есть более новая версия python, вы можете даже перейти к последней и самой лучшей f строк
Также кажется, что вы должны рассмотреть pandas
функция группового режима
Их пример заставляет меня поверить, что вам нужно:
for name, group in grouped:
group.to_excel('test files/ranking_{}.xlsx'.format(name), index=False)
Однако я не эксперт по pandas
и не проверял это, чтобы быть точным.