我很难在一列df和另一列df中找到字符串匹配,其中包含regex列表和它自己的regex类型。这是regex df。
**Country** | **Regex**
CN | ^\w{8,25}$
BE | ^BE[0-9]{10}
AT | ^ATU[0-9]{8}然后,我希望另一个df中的Data列中的值扫描并找到与regex df匹配的任何内容,并返回它自己的国家类型,在那里他们找到了匹配的regex。这是我想要的输出( Suggestion列)。需要它给我的建议,哪个国家的类型,匹配正则表达式。
**Data** | **Suggestion** **Data** | **Suggestion**
BE135688 | ----> BE135688 | BE
78567899 | 78567899 | CN
AT5678899 | AT5678899 | AT这就是我试过的
df['Data'].str.match(df_regex.Regex)但是我得到了这个错误,
TypeError: ("'Series' objects are mutable, thus they cannot be hashed", 'occurred at index 271179')我知道str.match只能与字符串类型匹配。但我不知道如何让它扫描列中的整个值,并为匹配的正则表达式返回自己的国家类型。有没有更好的方法来做到这一点?感谢帮助:)
发布于 2020-04-11 22:09:55
一种选择是遍历所有正则表达式,并在每次匹配时将相应的国家/地区添加到建议中。下面是一个例子*
import pandas as pd
df_regex = pd.DataFrame({'Country': ['CN', 'BE', 'AT'],
'Regex': ['^\w{8,25}$', '^BE[0-9]{10}', '^AT[0-9]{7}']})
df = pd.DataFrame({'Data': ['BE135688', '78567899', 'AT5678899']})
regex_map = dict(zip(df_regex.Regex, df_regex.Country))
def country_suggestions(row):
matches = []
for reg in regex_map:
if re.search(reg, row):
matches.append(regex_map[reg])
return ', '.join(matches)
df['Suggestions'] = df['Data'].apply(country_suggestions)
print(df)这是输出:
Data Suggestions
0 BE135688 CN
1 78567899 CN
2 AT5678899 CN, AT*请注意,我已将正则表达式^ATU[0-9]{8}更改为^AT[0-9]{7},因此它实际上与值AT5678899匹配。这应该进行适当的调整。
https://stackoverflow.com/questions/61136038
复制相似问题