我创建了一个这样的数据框:
A B
0 aa 1
1 bb 2
2 cc 3
3 dd 1
4 ee 1
然后我用这一行插入标签:
df['label']= np.where((df['B']>2),'start',np.NaN)
结果是
A B label
0 aa 1 nan
1 bb 2 nan
2 cc 3 start
3 dd 1 nan
4 ee 1 nan
这是相当直接的。然而,当我试图反击我的桌子时,我无法得到“我的桌子”。行。
df[(df.label.isnull())]
Empty DataFrame
Columns: [A, B, label]
Index: []
df[(df.label.isna())]
Empty DataFrame
Columns: [A, B, label]
Index: []
df[(df.label == np.nan)]
Empty DataFrame
Columns: [A, B, label]
Index: []
我只使用这个获得nan行:
df[(df.label == 'nan')]
A B label
0 aa 1 nan
1 bb 2 nan
3 dd 1 nan
4 ee 1 nan
我错误地将空值设为字符串值' nan'?谢谢。
答案 0 :(得分:1)
是。 np.where
已将np.NaN
转换为字符串,因为 start 是一个字符串:
np.where((df['B']>2), 'start', np.NaN)
#array(['nan', 'nan', 'start', 'nan', 'nan'],
# dtype='|S32')
提供None
作为字符串的空值:
df['label'] = np.where((df['B']>2), 'start', None)
df[df.label.isnull()]
# A B label
#0 aa 1 None
#1 bb 2 None
#3 dd 1 None
#4 ee 1 None
或使用pd.Series.where
方法:
df['label'] = 'start'
df['label'] = df.label.where(df.B > 2)
df[df.label.isnull()]
# A B label
#0 aa 1 NaN
#1 bb 2 NaN
#3 dd 1 NaN
#4 ee 1 NaN
答案 1 :(得分:0)
您可以使用apply:
df['label'] = df.apply(lambda x: 'start' if x.B>2 else np.nan, axis=1)
df[(df.label.isnull())]
Out[135]:
A B label
0 aa 1 NaN
1 bb 2 NaN
3 dd 1 NaN
4 ee 1 NaN
或者:
df['label'] = df.B.gt(2).apply({True:'start',False:np.nan}.get)