pandas 在数据框的列中用子串替换子串

eqqqjvef  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(125)

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

  • "Frankfurt a.Main"变为"Frankfurt a. Main"
  • "Frankfurt a.d.Oder"变为"Frankfurt a.d. Oder",依此类推。

我非常肯定pandas.Series.str.containspandas.Series.str.replace在这里是有帮助的,但是我的一个问题是我不知道如何将替换任务放在可以被上述函数使用的形式中。

pkbketx9

pkbketx91#

您可以使用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
1szpjjfi

1szpjjfi2#

您可以使用正lookbehind (?<=\.)向左Assert一个点,并匹配[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

相关问题