Python 3.x 为什么会有很多;“南”;从Excel文件导入多索引数据框后是否在索引中?

Python 3.x 为什么会有很多;“南”;从Excel文件导入多索引数据框后是否在索引中?,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个Excel文件,在Excel中如下所示: 2016-1-1 2016-1-2 2016-1-3 2016-1-4 300100 am 1 3 5 1 pm 3 2 4 5 300200 am 2 5 2 6 p

我有一个Excel文件,在Excel中如下所示:

            2016-1-1    2016-1-2    2016-1-3    2016-1-4
300100  am    1           3            5           1
        pm    3           2            4           5
300200  am    2           5            2           6
        pm    5           1            3           7
300300  am    1           6            3           2
        pm    3           7            2           3
300400  am    3           1            1           3
        pm    2           5            5           2
300500  am    1           6            6           1
        pm    5           7            7           5
但在我通过pd.read_excel导入并打印它之后,它在Python中显示如下:

            2016-1-1    2016-1-2    2016-1-3    2016-1-4
300100  am    1           3            5           1
NaN     pm    3           2            4           5
300200  am    2           5            2           6
NaN     pm    5           1            3           7
300300  am    1           6            3           2
NaN     pm    3           7            2           3
300400  am    3           1            1           3
NaN     pm    2           5            5           2
300500  am    1           6            6           1
NaN     pm    5           7            7           5

我如何解决这个问题,使数据框看起来像Excel中的格式,而没有这么多“NaN”?谢谢

如果不访问Excel文件或不了解版本,就无法确定,但看起来好像有一列数字(第一列),每隔一行空白。Pandas需要均匀填充的列,所以在Excel中,每个第一列编号(id?)的AM和PM都有一种“结构”信息,Pandas只看到两行,其中一行的第一列无效。根据您实际希望访问此数据的方式,一个简单的解决方法是将每个NaN替换为其正上方的数字,因此每行包含“id”的AM或PM信息。另一个修复方法是将列结构更改为具有2016-1-1-am和2016-1-1-pm字段。

您正在寻找fillna方法:

df = df.fillna('')

大多数情况下,当Excel看起来像示例中的一样时,它实际上在这些空格处有空格。但是,细胞合并了,所以看起来很漂亮。当您将其导入熊猫时,它会将其读取为空或NaN

要修复它,请向前填充空单元格,然后设置为索引

df.ffill()

尝试用NaN扩展列的宽度,并告诉我是否有任何更改如果没有任何更改,则很可能是因为单元格被解析为数字格式,当它没有看到任何内容时,会将其解释为null。。因此,在导入文件之前,我尝试在Excel中将一些NaN替换为其正上方的数字,而不是将其解析为文本/字符串,如果必须从代码中插入“”,那么它确实起到了作用。但是如何快速地对熊猫做到这一点呢?我知道如果它们是列中的值,我可以使用“replace”,但我不知道如何处理索引。谢谢