我使用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引起的。这是预期的功能还是错误?