我想替换pandas中的行值。
import pandas as pd
import numpy as np
data = {'type': ['place', 'home', 'place', 'walk', 'place', 'work', 'home', 'place'],'labels': ['NaN', 'NaN', 'shop', 'Nan', 'clinic', 'NaN', 'NaN', 'NaN']}
a = pd.DataFrame(data, columns = ['type', 'labels'])
是否有可能将['类型']替换为['标签']只有['标签']不是np的条件? .NaN和['类型'] =='地点'用熊猫?
如果可能的话,我更愿意使用df.loc []。
答案 0 :(得分:2)
首先,您提供的数据实际上不是np.NaN
,而是仅以不同方式处理的字符串'NaN'
或'Nan'
。如果这是你的出发点,你可以这样做:
a['labels'] = a['labels'].str.lower().replace('nan', np.NaN)
然后定义您的mask
并替换:
mask = (a['labels'].notnull()) & (a['type'] == 'place')
df.loc[mask, 'type'] = df.loc[mask, 'labels']
type labels
0 place NaN
1 home NaN
2 shop shop
3 walk NaN
4 clinic clinic
5 work NaN
6 home NaN
7 place NaN
或者,使用上面定义的相同mask
,您可以使用numpy.where
a['type'] = np.where(mask, a['labels'], a['type'])