如何使用Pandas截断CSV文件中根字符串周边的字符串?
使用Pandas处理CSV,根据根字符串截断语句内容
嘿,我来帮你搞定这个需求!要实现根据另一列的根字符串截断原语句的功能,我们可以用Pandas搭配Python的字符串处理能力来完成,下面是具体的步骤和代码示例:
1. 准备工作
首先假设你的CSV文件里有两列核心数据:
original_text:存储需要处理的原语句root_string:存储作为截断中心的根字符串
我们会生成一个新列truncated_text来存放处理后的结果。
先导入Pandas库:
import pandas as pd
2. 定义截断逻辑函数
我写了一个通用的处理函数,针对你的示例需求做了适配——它会以根字符串为中心,保留其前后指定数量的词,去掉更远的无关内容:
def truncate_text(original, root): # 如果根字符串不在原语句里,直接返回原内容 if root not in original: return original # 把原语句按空格拆成单词列表 words = original.split() # 找到根字符串在单词列表里的位置 root_idx = words.index(root) # 这里根据你的示例,保留根字符串前4个词、后4个词(包含根字符串本身) # 你可以根据实际需求调整数字 start_idx = max(0, root_idx - 4) end_idx = min(len(words), root_idx + 5) # 因为切片是左闭右开,所以+5才能包含后4个词 # 把选中的单词拼接成新字符串 return ' '.join(words[start_idx:end_idx])
3. 应用到CSV数据上
读取你的CSV文件,然后用apply方法把函数批量应用到每一行:
# 替换成你的CSV文件路径 df = pd.read_csv('your_data.csv') # 生成处理后的新列 df['truncated_text'] = df.apply(lambda row: truncate_text(row['original_text'], row['root_string']), axis=1) # 可以打印几行看看结果 print(df[['original_text', 'root_string', 'truncated_text']].head())
4. 用你的示例验证
我们用你给出的测试数据跑一遍,看看结果是否符合预期:
# 示例测试数据 test_data = { 'original_text': ['lack of association between the promoter polymorphism of the mtnr1a gene and adolescent idiopathic scoliosis'], 'root_string': ['mtnr1a'] } test_df = pd.DataFrame(test_data) # 应用函数 test_df['truncated_text'] = test_df.apply(lambda row: truncate_text(row['original_text'], row['root_string']), axis=1) # 打印结果 print(test_df['truncated_text'].iloc[0])
运行后会输出:
promoter polymorphism of the mtnr1a gene and adolescent idiopathic
完全和你想要的结果一致!
5. 灵活调整规则
如果你的需求不是固定保留前后4个词,比如需要根据特定关键词(比如the、of)来截断,或者保留更复杂的上下文,可以修改start_idx和end_idx的计算逻辑。举个例子:
- 如果想向前截断到最近的
the之后:可以从root_idx往前遍历,找到第一个the的位置,然后把start_idx设为这个位置+1 - 如果想向后截断到最后一个形容词(需要简单的NLP支持),可以用
nltk库做词性标注后筛选
内容的提问来源于stack exchange,提问作者jurek
相关产品推荐
相关产品推荐

