如何将字母值替换为另一列 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})
)
我得到了以下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})
)