在R语言中调换逗号分隔的子字符串位置
解决国家名称格式调换的问题
嘿,这个需求我之前处理过,用Pandas就能轻松搞定!针对那种"[国名简称], [完整前缀]"格式的名称,我们可以用两种思路来调换逗号两侧的内容:
方法一:拆分拼接法(直观易懂)
这种方法适合刚接触Pandas的朋友,步骤清晰,容易理解:
首先先准备示例数据(你可以替换成自己的DataFrame):
import pandas as pd # 模拟你的数据框 df = pd.DataFrame({ "Country": [ "China, People's Republic of", "Congo, Democratic Republic of the", "Macedonia, Republic of", "Germany", # 非目标格式的国家名,测试兼容性 "Japan" ] })
然后执行拆分和拼接操作:
# 按", "拆分,生成两列临时列 df[["Short_Name", "Prefix"]] = df["Country"].str.split(", ", expand=True) # 对有Prefix的行调换位置,无Prefix的保留原名 df["Cleaned_Country"] = df.apply( lambda row: f"{row['Prefix']} {row['Short_Name']}" if pd.notna(row['Prefix']) else row['Country'], axis=1 ) # 删掉临时列(可选) df = df.drop(["Short_Name", "Prefix"], axis=1)
执行后,Cleaned_Country列就会得到你想要的格式:比如"Democratic Republic of the Congo"、"People's Republic of China",而像Germany、Japan这类正常格式的名称也会原样保留。
方法二:正则替换法(简洁高效)
如果你的数据量比较大,或者想写更简洁的代码,用正则表达式替换是更好的选择,一行代码就能搞定:
df["Cleaned_Country"] = df["Country"].str.replace(r"^([^,]+), (.*)$", r"\2 \1", regex=True)
正则表达式解释:
^([^,]+):匹配字符串开头到逗号前的所有内容(也就是逗号左边的部分),用括号分组标记为\1,:匹配逗号加空格的分隔符(.*)$:匹配逗号后面到字符串结尾的所有内容,分组标记为\2- 替换为
r"\2 \1":就是把两个分组的内容调换位置,中间加空格
这种方法不需要生成临时列,处理速度更快,而且同样能兼容非目标格式的国家名(不会对它们做任何修改)。
内容的提问来源于stack exchange,提问作者Edward Gargan
相关产品推荐
相关产品推荐

