Pandas稀疏数据 PandasIO工具 Pandas Caveats & Gotchas 当任何匹配特定值的数据(NaN /缺失值,尽管可以选择任何值)被省略时,稀疏对象被“压缩”。一个特殊的SparseIndex对象跟踪数据被“稀疏化”的位置。这将在一个例子中更有意义。所有的标准Pandas数据结构都应用了 to_sparse 方法 - import pandas as pd import numpy as np ts = pd.Series(np.random.randn(10)) ts[2:-2] = np.nan sts = ts.to_sparse() print sts 其 输出 如下 - 0 -0.810497 1 -1.419954 2 NaN 3 NaN 4 NaN 5 NaN 6 NaN 7 NaN 8 0.439240 9 -1.095910 dtype: float64 BlockIndex Block locations: array([0, 8], dtype=int32) Block lengths: array([2, 2], dtype=int32) 为了记忆效率的原因存在稀疏对象。 现在让我们假设你有一个大的NA DataFrame并执行下面的代码 - import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10000, 4)) df.ix[:9998] = np.nan sdf = df.to_sparse() print sdf.density 其 输出 如下 - 0.0001 通过调用 to_dense 可以将任何稀疏对象转换回标准密集形式- import pandas as pd import numpy as np ts = pd.Series(np.random.randn(10)) ts[2:-2] = np.nan sts = ts.to_sparse() print sts.to_dense() 其 输出 如下 - 0 -0.810497 1 -1.419954 2 NaN 3 NaN 4 NaN 5 NaN 6 NaN 7 NaN 8 0.439240 9 -1.095910 dtype: float64 稀疏Dtypes 稀疏数据应该具有与其密集表示相同的dtype。目前支持 float64,int64 和 booldtypes 。取决于原始的 dtype,fill_value默认 更改 - float64 - np.nan int64 - 0 布尔 - 错误 让我们执行下面的代码来理解相同的内容 - import pandas as pd import numpy as np s = pd.Series([1, np.nan, np.nan]) print s s.to_sparse() print s 其 输出 如下 - 0 1.0 1 NaN 2 NaN dtype: float64 0 1.0 1 NaN 2 NaN dtype: float64 PandasIO工具 Pandas Caveats & Gotchas