用一组新值替换看起来像一列元素的范围,并将其余值设置为0

时间:2018-12-11 03:21:59

标签: python pandas dataframe

对于一个数据框,我用一系列值替换列中的一组项目,如下所示:

df['borough_num'] = df['Borough'].replace(regex=['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX'], value=[1, 2, 3, 4,5])

我想用值0替换之前未提到的'Borough'中所有其余元素的问题,我还需要使用regex,因为看起来像数据。 07布朗克斯,我还需要将其替换为5而不是0

2 个答案:

答案 0 :(得分:1)

在上一个问题中,使用replace关于其工作原理,您可以检查link

s=df.Borough.replace(dict(zip(l,[1,2,3,4,5])),regex=True)
pd.to_numeric(s,errors = 'coerce').fillna(0).astype(int)
Out[44]: 
0    3
1    5 # notice here still change to 5 
2    1
3    2
4    0
Name: Borough, dtype: int32

数据输入

df = pd.DataFrame({
    'Borough': ['QUEENS', 'BRONX 777', 'MANHATTAN', 'BROOKLYN', 'INVALID']})
l = ['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX']

答案 1 :(得分:0)

或更短一些,请使用map

df['borough_num']=df['Borough'].map(dict(zip(['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX'],[1, 2, 3, 4,5])))

现在:

print(df)

符合预期。

更新

df['borough_num']=df['Borough'].str.replace('\d+','').map(dict(zip(['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX'],[1, 2, 3, 4,5])))