使用fillna,downcast和pandas

时间:2014-11-21 16:53:55

标签: python numpy pandas

我已经搜索了一些东西来帮助我理解类方法downcast中的关键字参数DataFrame.fillna。请提供一个示例,以帮助促进我和每个人的学习:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html

此外,如果您可以逐列说明类型设置,并且列中包含NaN或甚至NoneType值,以及如何处理此类常见内容。这两者之间的区别是什么。

非常感谢!

1 个答案:

答案 0 :(得分:3)

尽管文档说的是:

  

向下滚动 dict,默认为无

     

项目的词典 - > dtype of what to   如果可能的话,可以向下传播,或者尝试向下传播的字符串'推断'   到适当的相等类型(如果可能,例如float64到int64)

如果您提供dict为downcast,则会获得AssertionError("dtypes as dict is not supported yet")

只能使用downcast='infer'导致pandas尝试向下转换例如浮点数到整数。但这似乎是错误的:如果列中的所有浮点数都超过10000,它将失去精度并将它们转换为整数。

In [1]: import pandas as pd
   ...: import numpy as np
   ...: df = pd.DataFrame([[3.14,9999.9,10000.1,200000.2],[2.72,9999.9,10000.1,300000.3]], columns=list("ABCD"))
   ...: df.dtypes
   ...: 
Out[1]: 
A    float64
B    float64
C    float64
D    float64
dtype: object

In [2]: df
Out[2]: 
      A       B        C         D
0  3.14  9999.9  10000.1  200000.2
1  2.72  9999.9  10000.1  300000.3

In [3]: dff=df.fillna(0, downcast='infer')
   ...: dff.dtypes
   ...: 
Out[3]: 
A    float64
B    float64
C      int64
D      int64
dtype: object

In [4]: dff
Out[4]: 
      A       B      C       D
0  3.14  9999.9  10000  200000
1  2.72  9999.9  10000  300000