Повторите df.reindex для нескольких таблиц Excel - PullRequest
1 голос
/ 06 февраля 2020

Может кто-нибудь помочь мне с тем, как переиндексировать несколько листов Excel сделать c? Порядок столбцов нуждается в переключении, и приведенное ниже работает для одного листа, но не для нескольких листов ....

При открытии электронной таблицы выполните следующие действия: df = pd.read_excel(excel_file, sheet_name=''Sheet Name')

И определение нового порядка столбцов как:

cols = (['N', 'Ø'])

Затем переиндексация в этом порядке

df = df.reindex(columns=cols)

Работает, но когда я выбрал имя_сталицы = Нет, чтобы прочитать в все листы я получаю сообщение об ошибке:

«AttributeError: объект dict не имеет атрибута reindex»

Я новичок в Python, поэтому не могу понять, почему я не могу запустить свой reindex через все df.

Заранее спасибо

1 Ответ

1 голос
/ 06 февраля 2020

Когда sheet_name=None, возвращаемое значение равно OrderedDict {SheetName: pd.DataFrame}. Здесь я создал простой файл .xlsx из двух листов с одной строкой на каждом листе, с разными метками столбцов.

d = pd.read_excel('test.xlsx', sheet_name=None)

for sheet_name, df in d.items():
    print(sheet_name)
    print(f'{df}\n')

#Sheet1
#   foo  bar
#0   11   12
#
#Sheet2
#   baz  boo
#0    1    2

Так что, если вы хотите изменить их, вы можете l oop над словарем

# Add 20, but you could reindex for instance. 
for sheet_name, df in d.items():
    d[sheet_name] = df.add(20)

print(d)
#OrderedDict([('Sheet1',    
#                 foo  bar
#              0   31   32), 
#             ('Sheet2',   
#                 baz  boo
#              0   21   22)])

Если все листы содержат одинаковую информацию, то вы можете concat в один DataFrame. Здесь, поскольку нет перекрывающихся столбцов, это не имеет особого смысла. Имена листов добавляются как ключи MultiIndex, поэтому вы всегда можете разделить их обратно.

df = pd.concat(d, sort=False)
print(df)
#           foo   bar   baz   boo
#Sheet1 0  31.0  32.0   NaN   NaN
#Sheet2 0   NaN   NaN  21.0  22.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...