美好的一天,
我有一个这样的数据框:
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]
如何做到这一点,将不胜感激。提前致谢。
答案 0 :(得分:3)
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