Pandas:使用.astype(str)时忽略空值?

时间:2016-09-08 20:54:36

标签: python-2.7 pandas

所以我有一个数据帧,称之为TABLE,我正在使用Pandas和Python 2.7来分析它。它主要是分类数据所以现在我的目标是得到我的表的摘要,其中列出每个列名称和该列中值的平均长度。 示例表:

   A      B     C    E    F
0  djsdd  973  348f  NaN  abcd
1  dsa    49   34h5  NaN  NaN

然后我想要的输出就像:

Column AvgLength
A      4.0
B      2.5
C      4.0
E      NaN
F      4.0

现在我遇到的第一个问题是数据集中有一些数值。我想我可以使用.astype(str)来解决这个问题,所以我做了以下几点:

for k in TABLE:
    print "%s\t %s"%(k,TABLE[k].astype(str).str.len().mean())

现在的问题是,我认为.astype(str)正在将空值转换为字符串,因为我最终得到了以下输出:

Column AvgLength
A      4.0
B      2.5
C      4.0
E      3.0
F      3.5

请注意,包含空值的E列的平均长度为3,而F列的平均值为3.5。我的理解是因为它占用了字符串“NaN”的长度。

有没有办法做我想做的事情并忽略Null值?或者我应该采取一种完全不同的方法(我对熊猫很新)?

(我确实读过.dropna(),但我不想省略所有可能包含空值的列,因为有些列可能在数据旁边有空值。我想忽略我的意思中的空值

1 个答案:

答案 0 :(得分:3)

stack获得系列作品 dropna要摆脱NaN
astype(str).str.len()获得长度 unstack().mean()平均长度
reindex(TABLE.columns)以确保我们获得所有原始列

TABLE.stack().dropna().astype(str).str.len().unstack().mean().reindex(TABLE.columns)

A    4.0
B    2.5
C    4.0
E    NaN
dtype: float64