Google листает APIv4 комментарии к pandas df, а не к значениям - PullRequest
0 голосов
/ 27 ноября 2018

Я получаю заметки для диапазонов A1:E7 листа.Есть заметки в B1, E1, D4 и B7.

result = gsheets.service.spreadsheets().get(spreadsheetId=key, fields="sheets/data/rowData/values/note").execute()
data=result['sheets'][0]['data'][0]

создает следующий словарь:

{u'rowData': [
        {u'values': [{}, {u'note': u'B1 notes'}, {}, {}, {u'note': u'E1 notes'}]},
        {}, 
        {}, 
        {u'values': [{}, {}, {}, {u'note': u'D4 notes'}]},
        {}, 
        {}, 
        {u'values': [{}, {u'note': u'B7 notes'}]}
        ]
}

Теперь, как мне получить это вкадр данных 7x5, имитирующий диапазон A1: E7?Я хочу использовать '' для пустых ячеек.

1 Ответ

0 голосов
/ 30 ноября 2018

Это решение немного сложно прочитать, но оно работает в моих тестах.Первым шагом является создание временного DataFrame из списка диктов верхнего уровня, где каждый (возможно, пустой) dict представляет строку в исходной электронной таблице.

Предполагается, что ваш словарь называется d:

import pandas as pd
from pandas.io.json import json_normalize

temp = pd.DataFrame.from_dict(d['rowData']) 
temp
                                                     values
0  [{}, {'note': 'B1 notes'}, {}, {}, {'note': 'E1 notes'}]
1                                                       NaN
2                                                       NaN
3                        [{}, {}, {}, {'note': 'D4 notes'}]
4                                                       NaN
5                                                       NaN
6                                [{}, {'note': 'B7 notes'}]

# JSON-normalize each non-null row
res = (pd.DataFrame(temp['values'].map(lambda x:
                                       json_normalize(x).values.flatten() 
                                       if x is not np.nan else [np.nan]) 
                                  .values
                                  .tolist()
                   )
      ).fillna('')

res.index = range(1, res.shape[0]+1)
res.columns = list('ABCDE')

res
  A         B C         D         E
1    B1 notes              E1 notes
2                                  
3                                  
4                D4 notes          
5                                  
6                                  
7    B7 notes                      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...