将包含列表的数据行转换为NaN值。

时间:2018-06-10 17:36:37

标签: python pandas data-structures

美好的一天,

我有一个这样的数据框:

 A      B      C
John    45    [1,0] 
Carl    3     [1,2,1]
Fred    4     [-1]

正如上文“C&C”中所见。一些行包含列表。我的目标是将它们转换为NaN值。我希望输出看起来像这样:

   A      B      C
John     45     NaN 
Carl     3      NaN
Fred     4      [-1]

如何做到这一点,将不胜感激。提前致谢。

3 个答案:

答案 0 :(得分:3)

masklen创建的布尔掩码一起使用:

df.C = df.C.mask(df.C.str.len() > 1)

或者:

df.C = np.where(df.C.str.len() > 1, np.nan, df.C)
print (df)
      A   B     C
0  John  45   NaN
1  Carl   3   NaN
2  Fred   4  [-1]

如果想将一个项目列表转换为标量:

df.C = np.where(df.C.str.len() == 1,  df.C.str[0], np.nan)
print (df)
      A   B    C
0  John  45  NaN
1  Carl   3  NaN
2  Fred   4 -1.0

答案 1 :(得分:1)

您也可以使用:

df['C'][df['C'].apply(len)>1] = np.nan

结果:

      A     B    C
0   John    45  NaN
1   Carl    3   NaN
2   Fred    4   [-1]

答案 2 :(得分:1)

我会使用loc

df.loc[df.C.str.len() > 1, "C"] = np.nan