Pandas: Reading Excel with merged cells
我有多个工作表的Excel文件,每个工作表看起来都像这样(但更长):
1 2 3 4 5 6 7 8 9 | 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:
1 2 3 4 5 6 7 8 9 | 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并按适当的值分组? (一种方法是重置索引,逐步查找值并将NaN替换为值,传入天数列表,然后将索引设置为该列。但是似乎应该有一个更简单的方法。)
您可以使用Series.fillna方法来预填充NaN值:
1 | df.index = pd.Series(df.index).fillna(method='ffill') |
例如,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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] |
1 | df = df.fillna(method='ffill', axis=0) # resolved updating the missing row entries |