如何将字母值替换为另一列 pandas python

how to replace alphabetic values to another column pandas python

我得到了以下df

housenumber housenumber_extra
1
2 a
55a a
55-4 -4
3455 C

如何获得以下df

housenumber housenumber_extra
1
2 A
55 A
55 -4
3455 C

我用替换函数从中过滤了字母值。然后使用更新功能但它不起作用。有人知道更好的方法吗

housenumber = df['huisnummer'].str.replace('[^a-zA-Z.,-/]', '')

df.set_index('serial', inplace=True)
df.update(huisnummer)
df.reset_index(inplace=True)  # to recover the initial structure

使用.str.extract:

df['housenumber_extra'] = df['housenumber'].str.extract(r'\d+([^\d].+)$')[0].str.strip().fillna(df['housenumber_extra']).str.upper()

输出:

>>> df
  housenumber housenumber_extra
0           1               NaN
1           2                 A
2         55a                 A
3        55-4                -4
4      3455 C                 C

看来您实际上并没有使用第二列,而是可以直接从第一列中提取所有信息:

df[['housenumber', 'housenumber_extra']] = (df['housenumber']
                                           .str.extract('(\d+)\W*(\w*)')
                                           .replace({1: str.upper})
                                           )

输出:

  housenumber housenumber_extra
0           1                  
1           2                  
2          55                 a
3          55                 4
4        3455                 C

甚至不使用命名捕获组进行赋值:

(df['housenumber']
 .str.extract('(?P<housenumber>\d+)\W*(?P<housenumber_extra>\w*)')
 .replace({'housenumber_extra': str.upper})
)