现在是
fixed in master,从17.0开始不应该是一个问题.
简而言之,DataFrames和Series都会创建一个空的NumPy数组并用np.nan值填充它,但DataFrame使用传递的str dtype作为此数组,而Series使用’O'(object)dtype覆盖它.
如果没有传入任何值,则两个类的__init__方法都会将空字典分配为默认数据:data = {}.
在测试了什么类型的对象数据之后,Series构造方法回退到生成np.nan值的数组,但是使用Numpy的’O’数据类型(不是str数据类型) – 请参阅here然后再看here:
np.empty(n, dtype='O') # later filled with np.nan
‘O’数据类型能够保存任何类型对象,因此np.nan在此处不会产生任何问题.
DataFrame的__init__方法也最终使用np.empty,然后用np.nan填充空数组.不同之处在于使用了指定的str数据类型(而不是’O’数据类型).代码基本上是as follows:
v = np.empty(len(index), dtype=str)
v.fill(np.nan)
现在,当使用str数据类型创建时,np.empty被强制转换为NumPy dtype’< U1'(即一个unicode字符),因此v变为:
array(['n', 'n'], dtype='
因为n是nan的第一个字母(np.nan仅表示为nan).