Подтвердить что ты не робот

Pandas: чтение Excel с объединенными ячейками

У меня есть файлы Excel с несколькими листами, каждый из которых выглядит немного (но гораздо дольше):

        Sample  CD4     CD8
Day 1   8311    17.3    6.44
        8312    13.6    3.50
        8321    19.8    5.88
        8322    13.5    4.09
Day 2   8311    16.0    4.92
        8312    5.67    2.28
        8321    13.0    4.34
        8322    10.6    1.95

В первом столбце фактически четыре ячейки объединены вертикально.

Когда я прочитал это с помощью pandas.read_excel, я получаю DataFrame, который выглядит следующим образом:

       Sample    CD4   CD8
Day 1    8311  17.30  6.44
NaN      8312  13.60  3.50
NaN      8321  19.80  5.88
NaN      8322  13.50  4.09
Day 2    8311  16.00  4.92
NaN      8312   5.67  2.28
NaN      8321  13.00  4.34
NaN      8322  10.60  1.95

Как я могу либо получить Pandas для понимания объединенных ячеек, либо быстро и легко удалить NaN и группу по соответствующему значению? (Один из подходов был бы к reset индексу, шаг за шагом, чтобы найти значения и заменить NaN со значениями, пройти в списке дней, а затем установить индекс в столбец. Но похоже, что должен быть более простой подход. )

4b9b3361

Ответ 1

Вы можете использовать метод Series.fillna для ввода заглавных букв в значениях NaN:

df.index = pd.Series(df.index).fillna(method='ffill')

Например,

In [42]: df
Out[42]: 
       Sample    CD4   CD8
Day 1    8311  17.30  6.44
NaN      8312  13.60  3.50
NaN      8321  19.80  5.88
NaN      8322  13.50  4.09
Day 2    8311  16.00  4.92
NaN      8312   5.67  2.28
NaN      8321  13.00  4.34
NaN      8322  10.60  1.95

[8 rows x 3 columns]

In [43]: df.index = pd.Series(df.index).fillna(method='ffill')

In [44]: df
Out[44]: 
       Sample    CD4   CD8
Day 1    8311  17.30  6.44
Day 1    8312  13.60  3.50
Day 1    8321  19.80  5.88
Day 1    8322  13.50  4.09
Day 2    8311  16.00  4.92
Day 2    8312   5.67  2.28
Day 2    8321  13.00  4.34
Day 2    8322  10.60  1.95

[8 rows x 3 columns]

Ответ 2

df = df.fillna(method='ffill', axis=0)  # resolved updating the missing row entries