Pandas DataFrame,默认数据类型为1、2、3和NaN值

时间:2018-07-12 23:48:52

标签: python pandas dataframe

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print df ['one']

输出:

    a    1.0

    b    2.0

    c    3.0

    d    NaN

Name: one, dtype: float64

该值设置为float

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
  'two' : pd.Series([1, 2, 3], index=['a', 'b', 'c'])}

df = pd.DataFrame(d)
print df ['one']

输出:

a    1

b    2

c    3

Name: one, dtype: int64

但是现在该值设置为int64

区别是第一个,值中有一个NaN

以上示例中设置数据类型的规则是什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

NaN的类型为float,因此熊猫也会推断所有ints的数字也都是floats

这很容易检查:

>>> type(np.nan) 
float 

我会推荐this有趣的读物

答案 1 :(得分:2)

继承了的许多错误决定。

参考:

Pandas Gotchas - Integer NA

Numpy or Pandas, keeping array type as integer while having a nan value

如果您查看pandaDf['value'] = 1 column = ['col1', 'col2', 'col3'] pandaDf.pivot_table(index = 'id', value = 'value', columns = column),则可以看到type(df.iloc[3,0])的类型为nan,这将迫使整个列的类型强制转换为浮点型。基本上,Pandas处理可空整数是垃圾,您只需要将它们作为浮点数处理即可。如果您不关心性能,也可以使用对象类型保存整数。