Python新手求教:如何将多句字符串转为每行对应一句的DataFrame?
解决字符串转句子行DataFrame的问题
嘿,我懂你现在的困扰啦!你用pd.read_csv加分隔符.的思路其实方向没错,但问题可不少:这种方式会把所有点都当成分隔符——比如句子里如果有Mr.或者etc.这种缩写,直接就把完整内容拆碎了;而且分割后还会出现多余的空字符串或者带空格的内容,完全达不到你要的每行一个完整句子的效果。
给你两个实用的解决方案,从基础到进阶,适合新手上手:
基础版:用正则准确分割句子
正则表达式能精准识别句子的结尾(通常是. ! ?,后面跟着空格或者文本结束),不会误拆缩写里的点。代码如下:
import pandas as pd import re # 你的原始文本 data = 'This is a book, to which I found exciting. I bought it for my cousin. He likes it.' # 核心:用正则分割句子,匹配「.!?结尾 + 空格/文本结束」的位置 sentences = re.split(r'(?<=[.!?])\s+', data.strip()) # 过滤掉可能的空字符串(比如文本最后有多余标点时会产生) sentences = [sentence for sentence in sentences if sentence] # 转换成DataFrame,指定列名 data_df = pd.DataFrame(sentences, columns=['Sentences']) # 查看结果 print(data_df)
运行后你会得到完美的每行一个句子的DataFrame,完全符合你的需求!
进阶版:处理更复杂的句子场景
如果你的文本里有引号内的句子、省略号或者特殊缩写,稍微调整正则就能适配,比如:
# 适配带引号、省略号的句子分割 sentences = re.split(r'(?<=[.!?])\s+(?=(?:[^"]*"[^"]*")*[^"]*$)', data.strip())
这个正则会跳过引号内的标点,避免把引号里的句子误分割。
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

