openpyxl изменяет числовой формат столбцов в неизмененном листе того же файла - PullRequest
0 голосов
/ 04 января 2019

Я заметил, что когда я использую openpyxl для добавления дополнительного листа в файл .xlsx, он автоматически изменяет числовой формат столбца (столбцов) в ранее существующем листе в этом файле.

Хронологически проблема заключается в следующем:

1) Я использую формат «отметки времени» для ручной записи даты и времени некоторых интересующих событий в столбце этого ранее существующего листа. Через Excel я установил для столбца формат даты (код формата «ММ / ДД / ГГГГ ЧЧ: ММ: СС»)

Столбец, в котором я сохраняю дату и время событий, которые я регистрирую

2) Я прочитал этот «ранее существующий» лист с пандами, и все идет хорошо (то есть, панды могут читать эти даты / время):

import pandas as pd
df = pd.read_excel(myPath + 'myFile.xlsx',sheetname='pre-existent',header=0)

print(df['timeStampUTC'])

          timeStampUTC  
0  2018-12-02 12:59:00  
1  2018-12-02 14:29:00  
2  2018-12-02 15:39:00  
3  2018-12-02 17:05:00  
4  2018-12-02 18:38:00  
5  2018-12-02 19:36:00  
6  2018-12-02 20:27:00  
7  2018-12-02 21:44:00  
8  2018-12-02 22:15:00  
9  2018-12-02 22:46:00  
10 2018-12-02 23:07:00  
11 2018-12-04 15:46:00  
12 2018-12-04 15:53:00 
Name: timeStampUTC, dtype: datetime64[ns]

3) Я делаю некоторые вычисления и сохраняю эти другие вычисления на новом листе в том же файле ('myFile.xlsx') и сохраняю изменения:

from openpyxl import *

writer = pd.ExcelWriter(myPath + 'myFile.xlsx', engine = 'openpyxl')
writer.book = book
New_df.to_excel(writer, index = False, sheet_name='new-sheet')
writer.save()
writer.close()

4) Как только я попытаюсь повторить шаг 2, панды больше не могут правильно читать дату и время в моем столбце:

print(df['timeStampUTC'])

          timeStampUTC 
0    NaN
1    NaN
2    NaN
3    NaN
4    NaN
5    NaN
6    NaN
7    NaN
8    NaN
9    NaN
10   NaN
11   NaN
12   NaN
Name: timeStampUTC, dtype: float64

Важно отметить, что при повторном открытии «myFile.xlsx» в Excel столбец отображается как обычно. Когда я переустановил числовой формат столбца на «Дата» (код формата «ММ / ДД / ГГГГ ЧЧ: ММ: СС»), pandas снова сможет читать метки времени.

Все, что позволяет мне перечитать этот столбец с пандами, приветствуется.

Спасибо !!!!

Juancho Gossn

1 Ответ

0 голосов
/ 23 января 2019

возможное частичное решение:

Используйте только чтение при открытии книги. Сохраните вывод в новый файл Excel. workbook = openpyxl.load_workbook (filename = 'name.xlsx', read_only = True)

Моя проблема: 2 ячейки шрифта меняются на 1 ячейку шрифта.

...