циклически просматривая книгу с несколькими листами и извлекая значения в python - PullRequest
2 голосов
/ 26 февраля 2020

У меня есть таблица Excel с несколькими рабочими книгами, и каждая рабочая книга имеет следующие атрибуты:

data = pd.DataFrame({
'start date': ['1988/01/12', '1988/01/13', '1988/01/14', '1989/01/20','1990/01/01'],
'end date': ['1989/01/12', '1989/01/12', '1989/01/12', '1990/01/20','1991/01/01'],
'value': [11558522, 12323552, NaN, 18412280, NaN]
}) 

Я хочу l oop на каждом листе рабочей книги и:

  1. получить имя листа (это также идентификатор листа0
  2. получить минимальную дату (чтобы увидеть, когда этот лист начался)
  3. получить максимальную дату (чтобы увидеть, когда этот лист закончился )
  4. подсчитать количество пропущенных значений в этом листе (оснований только для столбца значений)

Мне нужна сводная таблица / фрейм данных, в котором у меня есть имя листа (id), дата начала , дата окончания и количество пропущенных значений, например:

data = pd.DataFrame({
sheet name': ['sheet 1', 'sheet 2', 'sheet 3', 'sheet 4','sheet5'],
'start date': ['1988/01/12', '1988/01/13', '1988/01/14', '1989/01/20','1990/01/01'],
'end date': ['1989/01/12', '1989/01/12', '1989/01/12', '1990/01/20','1991/01/01'],
'missing values': [3, 10, 1, 43, 8]
}) 

1 Ответ

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

Используйте sheet_name в read_excel для всех листов, чтобы упорядочить кадры данных, преобразовать столбцы в даты и время, получить минимальное и максимальное и подсчитать количество ошибочных значений с помощью sum маски, созданной с помощью Series.isna, последнее добавление в список и последнее создание нового DataFrame по конструктору:

L = []
for s, df in pd.read_excel('test.xlsx', sheet_name=None).items():
    d = {'sheet name': s, 
         'start date': pd.to_datetime(df['start date']).min(),
         'end date': pd.to_datetime(df['end date']).max(),
         'missing values':df['value'].isna().sum()}
    L.append(d)

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