求助:如何按长度限制拆分Pandas DataFrame中的字符串列?
Pandas字符串拆分:按长度限制拆分超长文本为多列
需求场景:处理Pandas DataFrame的
Name列,将长度超过10的字符串拆分为多个子串,所有子串长度≤10,拆分后扩展为额外列。数据构造代码:import pandas as pd df = pd.DataFrame({"Name": ["This is a long string", "This an even longer string", "This is the longest string"]})先实现基础需求:拆分为两列;最终目标是拆分所有符合长度要求的子串为多列。
基础实现:拆分为两列
通过从后往前查找空格,确保第一部分长度≤10,剩余部分作为第二列:
def split_first_two(s, max_len=10): # 从后往前找第一个空格,保证前半部分长度不超过限制 for i in range(len(s)-1, -1, -1): if s[i] == ' ' and len(s[:i]) <= max_len: return [s[:i].strip(), s[i+1:].strip()] # 极端情况:字符串无空格,直接截断 return [s[:max_len], s[max_len:]] # 应用函数并将结果展开为两列 df[['Name', 'Name1']] = df['Name'].apply(lambda x: pd.Series(split_first_two(x)))
执行后输出:
Name Name1 0 This is a long string 1 This is an even longer string 2 This is the longest string
完整实现:拆分所有符合长度的子串
循环分割字符串,直到所有子串长度≤10,自动生成对应列:
def split_all_parts(s, max_len=10): parts = [] current = s.strip() while len(current) > max_len: split_idx = -1 # 从后往前找合适的空格分割点 for i in range(len(current)-1, -1, -1): if current[i] == ' ' and len(current[:i]) <= max_len: split_idx = i break if split_idx == -1: # 无空格时直接截断 parts.append(current[:max_len]) current = current[max_len:] else: parts.append(current[:split_idx].strip()) current = current[split_idx+1:].strip() # 添加最后一段符合长度的内容 if current: parts.append(current) return parts # 对每个字符串执行全拆分 split_results = df['Name'].apply(split_all_parts) # 获取最长的拆分段数,用于生成列 max_part_count = split_results.str.len().max() # 生成对应列并赋值 for idx in range(max_part_count): df[f'Name{idx}'] = split_results.str[idx] # 将第一列重命名为Name(可选) df = df.rename(columns={'Name0': 'Name'})
执行后输出:
Name Name1 Name2 Name3 0 This is a long string NaN NaN 1 This is an even longer string 2 This is the longest string
内容的提问来源于stack exchange,提问作者SMS
相关产品推荐
相关产品推荐

