如何基于正则表达式合并Pandas DataFrame中的多行数据?
解决Pandas单列DataFrame跨行合并问题
问题背景
你有一个单列Pandas DataFrame,数据如下:
cat = { 'cat': ['a','b','c-',' -d','e']} df = pd.DataFrame(cat)
输出:
cat 0 a 1 b 2 c- 3 -d 4 e
需要将索引2和3的行合并为cd,得到目标结果:
cat 0 a 1 b 2 cd 3 e
之前尝试的df['cat'] = df['cat'].str.replace("-\n {8}-","",flags=re.M)无法生效,且不能使用分组方法。
解决方案
问题出在str.replace是对Series的每个元素单独处理,每个元素内部没有换行符,因此正则中的\n无法匹配跨行内容。我们可以先将整个Series拼接为单个字符串,处理后再拆分重构DataFrame:
import pandas as pd import re # 原数据 cat = { 'cat': ['a','b','c-',' -d','e']} df = pd.DataFrame(cat) # 1. 将Series拼接为带换行分隔的字符串 combined_str = '\n'.join(df['cat']) # 2. 替换目标跨行模式 processed_str = re.sub(r'-\n {8}-', '', combined_str) # 3. 拆分回列表并生成新DataFrame new_df = pd.DataFrame({'cat': processed_str.split('\n')}) # 验证结果 print(new_df)
输出结果
cat 0 a 1 b 2 cd 3 e
说明
- 先拼接成整体字符串,才能让正则匹配到
-\n {8}-这个跨行模式(即c-换行后接8个空格加-d)。 - 替换后拆分回列表,直接重构DataFrame,全程未使用分组方法,符合要求。
内容的提问来源于stack exchange,提问作者eazyezy
相关产品推荐
相关产品推荐

