我有以下 Dataframe :
d_test = {
'latitude' : [40.765004, 45.504641, 40.00000, -34.283007],
'longitude' : [-73.965961, 122.000000, -90.121679, -118.439891],
'test': [1,2,3,4],
}
df_test = pd.DataFrame(d_test)
我想使用正则表达式r'^[+-]?[0-9]*[.][0]*?$
来放置np.nan
,如果条件匹配。我知道如何使用正则表达式完全过滤结果:
df_test[~df_test[['latitude', 'longitude']].apply(lambda x: x.astype(str).str.contains(r'^[+-]?[0-9]*[.][0]*?$', regex=True)).any(axis=1)]
上面的代码给出:
latitude longitude test
0 40.765004 -73.965961 1
3 -34.283007 -118.439891 4
但我需要以下结果:
latitude longitude test
0 40.765004 -73.965961 1
1 NaN NaN 2
2 NaN NaN 3
3 -34.283007 -118.439891 4
我试着用Pandas的where
:
~df_[['latitude', 'longitude']].where(lambda x: x.astype(str).str.contains(r'^[+-]?[0-9]*[.][0]*?$', regex=True))
但它不工作(AttributeError: 'DataFrame' object has no attribute 'str'
)
3条答案
按热度按时间vdzxcuhz1#
您只需要将boolean indexing与
pandas.DataFrame.loc
搭配使用:#输出:
7gcisfzg2#
您可以将其分配回列
输出量
nfg76nw03#
把你的条件变成
cond1
使用
pandas where
输出: