Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:使用合并的单元格读取Excel_Python_Excel_Pandas - Fatal编程技术网

Python 熊猫:使用合并的单元格读取Excel

Python 熊猫:使用合并的单元格读取Excel,python,excel,pandas,Python,Excel,Pandas,我有多张工作表的Excel文件,每个工作表看起来有点像这样(但要长得多): 第一列实际上是垂直合并的四个单元格 当我使用pandas.read_excel阅读此文件时,我得到一个如下所示的数据框: 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 1

我有多张工作表的Excel文件,每个工作表看起来有点像这样(但要长得多):

第一列实际上是垂直合并的四个单元格

当我使用pandas.read_excel阅读此文件时,我得到一个如下所示的数据框:

       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和group?(一种方法是重置索引,逐步查找值并用值替换NaN,传入天数列表,然后将索引设置为列。但似乎应该有一种更简单的方法。)

您可以使用该方法来预先填充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]
df=df.fillna(method='ffill',axis=0)#解决了更新缺少的行条目的问题

“ffill”正是我想要的。谢谢。您如何解决合并列而不是行的相同问题?@SamarthBharadwaj:the有一个
参数,用于控制填充方向。要按行填充数据帧中的所有NAN,可以使用
df=df.fillna(method='ffill',axis=1)
。要仅填充选定行,请使用
df.loc
df.iloc
。例如,
df.loc[mask]=df.loc[mask].fillna(method='ffill',axis=1)
@unutbu-thx,但我的问题稍有不同,在这里表达:
fillna
with
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]