将子字符串替换为数据帧列中的子字符串



我有一个熊猫数据帧data,它有几个列。其中一列是GEN。此列以字符串形式包含德国城市。其中一些城市的格式不好,这意味着它们的值类似于"Frankfurt a.Main"。对于data['GEN']中的每个元素,我想用相应的表达式".b[A-ZÄÖÜ]"替换形式为".[A-ZÄÖÜ]"(即点后跟大写字母(的每个表达式。例如

  • "Frankfurt a.Main"变为"Frankfurt a. Main"
  • "Frankfurt a.d.Oder"变为"Frankfurt a.d. Oder"等等

我很确定pandas.Series.str.containspandas.Series.str.replace在这里很有帮助,但我的一个问题是,我不知道如何将替换任务设置为可以由上述函数使用的形式。

您可以使用pandas.Series.str.replace在原始数据中捕获组成德国城市名称的两个组,然后在它们之间添加空白。

试试这个:

data['GEN'] = data['GEN'].str.replace(r'(w+s.*.)(w*)', r'1 2', regex=True)

#输出:

0      Frankfurt a. Main
1    Frankfurt a.d. Oder

您可以使用正向查找(?<=.)在左侧断言一个点,并匹配其中一个[A-ZÄÖÜ]

在替换中使用空格,然后使用g<0>进行完全匹配

import pandas as pd
pattern = r"(?<=.)[A-ZÄÖÜ]"
items = [
"Frankfurt a.Main",
"Frankfurt a.d.Oder"
]
data = pd.DataFrame(items, columns=["GEN"])
data['GEN'] = data['GEN'].str.replace(pattern, r' g<0>')
print(data)

输出

GEN
0    Frankfurt a. Main
1  Frankfurt a.d. Oder