用唯一值替换字符串
Replace string with unique value
我正在处理一个数据集,其中一列 'PARNO' 的值以“/”分隔。
例如,9644-54-3184/5544/2583。实际上这相当于 9644-54-3184、9644-54-5544、9644-54-2583。
如果这是唯一的一列,我可以做一个简单的 .str.replace,但还有其他行采用这种格式,其中 PARNO 的开头不同于“9644-54-”
数据集示例如下,我的所有代码也在下面,包括我为清除其他列值而编写的代码。
import geopandas as gpd
import pandas as pd
import numpy as np
lc_subs['PARNO'] = lc_subs['PARNO'].str.replace('-','').str.replace('(','').str.replace(')','').str.replace(r'[A-Z]', '').str.replace(r'[a-z]', '').str.replace('.','').str.replace('#','')
lc_subs = (lc_subs.set_index(lc_subs.columns.drop('PARNO',1).tolist())
.PARNO.str.split(',|;|&', expand=True)
.stack()
.reset_index()
.rename(columns={0:'PARNO'})
.loc[:, lc_subs.columns]
)
有没有办法用该行的前 6 位数字替换“/”?
最终目标是每行有一个数字,没有文本或符号,因此我可以在 PARNO 列上进行空间连接。
感谢您的帮助!
为什么不使用辅助函数来扩展后缀?
strings = [
'9644-54-3184/5544/2583',
'foo-bar-234/5423/12'
]
def expandsuffix(string: str) -> str:
prefix, suffixes = string.rsplit('-', maxsplit=1)
return ', '.join('-'.join((prefix, suffix)) for suffix in suffixes.split('/'))
if __name__ == '__main__':
for string in strings:
print(expandsuffix(string))
这是从前缀复制号码扩展的简单方法:
def expand(s):
return s.replace("/",f",{s.rsplit('-',1)[0]}-").split(",")
print(expand("9644-54-3184/5544/2583"))
# ['9644-54-3184', '9644-54-5544', '9644-54-2583']
它的工作原理是用逗号和通用前缀替换“/”字符。然后在逗号上拆分。
所以你得到:
'9644-54-3184/5544/2583' --> '9644-54-3184,9644-54-5544,9644-54-2583'
然后拆分(在逗号上)作为扩展数字列表:
['9644-54-3184', '9644-54-5544', '9644-54-2583']
请注意,如果您的字符串可以包含逗号,您可以使用任何其他字符作为临时分隔符(例如“\n”)
我正在处理一个数据集,其中一列 'PARNO' 的值以“/”分隔。
例如,9644-54-3184/5544/2583。实际上这相当于 9644-54-3184、9644-54-5544、9644-54-2583。
如果这是唯一的一列,我可以做一个简单的 .str.replace,但还有其他行采用这种格式,其中 PARNO 的开头不同于“9644-54-”
数据集示例如下,我的所有代码也在下面,包括我为清除其他列值而编写的代码。
import geopandas as gpd
import pandas as pd
import numpy as np
lc_subs['PARNO'] = lc_subs['PARNO'].str.replace('-','').str.replace('(','').str.replace(')','').str.replace(r'[A-Z]', '').str.replace(r'[a-z]', '').str.replace('.','').str.replace('#','')
lc_subs = (lc_subs.set_index(lc_subs.columns.drop('PARNO',1).tolist())
.PARNO.str.split(',|;|&', expand=True)
.stack()
.reset_index()
.rename(columns={0:'PARNO'})
.loc[:, lc_subs.columns]
)
有没有办法用该行的前 6 位数字替换“/”?
最终目标是每行有一个数字,没有文本或符号,因此我可以在 PARNO 列上进行空间连接。
感谢您的帮助!
为什么不使用辅助函数来扩展后缀?
strings = [
'9644-54-3184/5544/2583',
'foo-bar-234/5423/12'
]
def expandsuffix(string: str) -> str:
prefix, suffixes = string.rsplit('-', maxsplit=1)
return ', '.join('-'.join((prefix, suffix)) for suffix in suffixes.split('/'))
if __name__ == '__main__':
for string in strings:
print(expandsuffix(string))
这是从前缀复制号码扩展的简单方法:
def expand(s):
return s.replace("/",f",{s.rsplit('-',1)[0]}-").split(",")
print(expand("9644-54-3184/5544/2583"))
# ['9644-54-3184', '9644-54-5544', '9644-54-2583']
它的工作原理是用逗号和通用前缀替换“/”字符。然后在逗号上拆分。
所以你得到:
'9644-54-3184/5544/2583' --> '9644-54-3184,9644-54-5544,9644-54-2583'
然后拆分(在逗号上)作为扩展数字列表:
['9644-54-3184', '9644-54-5544', '9644-54-2583']
请注意,如果您的字符串可以包含逗号,您可以使用任何其他字符作为临时分隔符(例如“\n”)