Pandas 将数据帧设置单元设置为NaN
我创建了一个数据帧,如下所示:Pandas 将数据帧设置单元设置为NaN,pandas,dataframe,filter,nan,Pandas,Dataframe,Filter,Nan,我创建了一个数据帧,如下所示: 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 这相当直截了当。
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
这相当直截了当。但是,当我尝试计数器检查我的表时,我无法获得“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
我是否错误地将null值设置为字符串值'nan'?谢谢。是的
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.系列。其中
方法:
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
您可以使用应用程序:
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)