对于一个数据框,我用一系列值替换列中的一组项目,如下所示:
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
答案 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])))