R语言:将数据框单列按字符长度拆分为多列
按固定字符长度拆分数据框文本列
Python (Pandas) 实现
方法1:正则表达式快速拆分
利用正则匹配固定长度的字符组,结合str.extract直接提取为多列,适合简单场景:
import pandas as pd # 示例数据框 df = pd.DataFrame({ 'text': ["I need more data today,", "Hello World!", "Short"] }) chunk_size = 5 # 生成匹配足够多组的正则(这里设10组,可根据最长文本调整) pattern = ''.join([f'(.{{1,{chunk_size}}})' for _ in range(10)]) # 提取拆分列并重命名 split_cols = df['text'].str.extract(pattern) split_cols.columns = [f'col{i+1}' for i in range(split_cols.shape[1])] # 合并到原数据框 result_df = pd.concat([df, split_cols], axis=1)
方法2:自定义函数拆分
需要灵活逻辑时,用自定义函数拆分后展开为列:
def split_text(s, chunk_size): return [s[i:i+chunk_size] for i in range(0, len(s), chunk_size)] # 应用函数并转为列 split_cols = df['text'].apply(lambda x: pd.Series(split_text(x, 5))) split_cols.columns = [f'col{i+1}' for i in range(split_cols.shape[1])] result_df = pd.concat([df, split_cols], axis=1)
R 实现
用stringr包的str_split_fixed可快速完成拆分:
library(dplyr) library(stringr) # 示例数据框 df <- data.frame( text = c("I need more data today,", "Hello World!", "Short"), stringsAsFactors = FALSE ) chunk_size <- 5 # 计算所需最大列数 max_cols <- ceiling(max(nchar(df$text)) / chunk_size) # 按固定长度拆分并转为数据框 split_cols <- str_split_fixed(df$text, paste0("(?<=.{", chunk_size, "})"), n = max_cols) split_cols_df <- as.data.frame(split_cols) colnames(split_cols_df) <- paste0("col", 1:max_cols) # 合并结果 result_df <- cbind(df, split_cols_df)
内容的提问来源于stack exchange,提问作者AJAY
相关产品推荐
相关产品推荐

