我有一个熊猫数据帧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.contains
和pandas.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