在Pandas数据框中打印无和NaN值会产生令人困惑的结果

时间:2016-01-14 05:40:09

标签: python-3.x pandas dataframe nan nonetype

我使用SQL查询使用Pandas read_sql()函数从SQL Server数据库获取一些数据。经过一些初步的打嗝,这一切似乎都运转良好。但是,使用print()显示提取的数据会产生极其混乱的输出。

在查询数据库时,我知道其中一个表的最新行尚未填充。因此,列的顶行包含字符串,而底行包含None。使用以下数据框可以简化这一过程。

    id         text
0    1   some words   <-- top rows contain strings
1    2         None
2    3         None
3    4         None
4    5         None
5    6         None
6    7         None
7    8         None
8    9         None
9   10         None   <-- bottom rows contain None

这可以使用以下方式生成:

import pandas as pd
tempDF = pd.DataFrame({'id':    np.arange(1,11),
                       'text': ['some words'] + [None]*9})

当我在Python 3.4中打印数据框时,我得到了预期的输出,即:

   id        text
0   1  some words
1   2        None
2   3        None
3   4        None
4   5        None
5   6        None
6   7        None
7   8        None
8   9        None
9  10        None

但是,在打印大型数据帧时,输出会自动拆分以仅显示顶行和底行。由于这个演示只有10行,我将设置显示参数,即使使用这个小数据帧也可以进行拆分:

with pd.option_context('display.max_rows', 8, 'display.max_columns', 3):
    print(tempDF)

但是,现在我得到以下输出:

    id        text
0    1  some words
1    2        None
2    3        None
3    4        None
..  ..         ...
6    7         NaN
7    8         NaN
8    9         NaN
9   10         NaN

似乎如果拆分下面的所有值都是None,那么它们将被解释为NaN。但是,分割之上的相同值(也有一些真正的字符串)被解释为None。

关于None和NaN之间的差异,似乎存在很多争议。显示两种不同类型的相同数据似乎真的令人困惑。我不知道这是由Python还是Pandas引起的。这是预期的功能还是错误?

0 个答案:

没有答案