Странная проблема при сохранении в excel pandas - PullRequest
2 голосов
/ 13 марта 2020

У меня возникли проблемы с записью в Excel. У меня есть 15 столбцов в моем фрейме данных. Я sh только для того, чтобы написать 7 из них, чтобы преуспеть и в процессе использовать другое имя для заголовка.

Вот мой код

cols = ['SN',  'Date_x','Material_x', 'Batch_x',  'Qty_x', 'Booked_x', 'State_x']
headers = ['SN', 'Date', 'Material', 'Batch',  'Qty', 'Booked', 'State']
df.style.apply(highlight_changes_ivt2, axis=None).to_excel(writer, columns =cols, header=headers, sheet_name="temp", index = False)

Но у меня есть следующие ошибки

  File "/home/week/anaconda3/envs/SC/lib/python3.7/site-packages/pandas/io/formats/style.py", line 235, in to_excel
engine=engine,
  File "/home/week/anaconda3/envs/SC/lib/python3.7/site-packages/pandas/io/formats/excel.py", line 735, in write
freeze_panes=freeze_panes,
  File "/home/week/anaconda3/envs/SC/lib/python3.7/site-packages/pandas/io/excel/_xlsxwriter.py", line 214, in write_cells
for cell in cells:
  File "/home/week/anaconda3/envs/SC/lib/python3.7/site-packages/pandas/io/formats/excel.py", line 684, in get_formatted_cells
for cell in itertools.chain(self._format_header(), self._format_body()):
 File "/home/week/anaconda3/envs/SC/lib/python3.7/site-packages/pandas/io/formats/excel.py", line 513, in _format_header_regular
f"Writing {len(self.columns)} cols but got {len(self.header)} "
ValueError: Writing 15 cols but got 7 aliases

Я попытался отладить .. и установить pdb.set_trace ()

df.style.apply(highlight_changes_ivt2, axis=None).to_excel(writer, columns =cols, header=headers, sheet_name="temp", index = False)
(Pdb) df.columns
      Index(['SN', 'Status_x', 'Material_x', 'Batch_x', 'Date_x', 'Quantity_x',
      'Booked_x', 'DiffQty_x', 'Status_y', 'Material_y', 'Batch_y',
      'Date_y', 'Quantity_y', 'Booked_y', 'DiffQty_y'],
      dtype='object')
(Pdb) 

Хотя этот код хорошо работает на моем домашнем ноутбуке ... просто интересно, что не так ... Разница только python, используя версию 3.7 для этого и 3.8 дома

Спасибо

1 Ответ

2 голосов
/ 13 марта 2020

Позвольте мне изложить мою идею в комментарии на примере:

df = pd.DataFrame(np.arange(16).reshape(4,-1))

# this is the reference dataframe
np.random.seed(1)
ref_df = pd.DataFrame(np.random.randint(1,10,(4,4)))

# this is the function
def highlight(col, ref_df=None):
    return ['background-color: yellow' if c>r else '' 
                for c,r in zip(col, ref_df[col.name])]

# this works
df[[0,1,3]].style.apply(highlight, ref_df=ref_df).to_excel('style.xlsx', header=list('abc'))

Вывод:

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...