如何从Pandas DataFrame中提取斜杠后的特定字符串?
解决提取仓库名称后缀的问题
嗨,我来帮你搞定这个提取/后字符串的需求,先梳理下你代码里的小问题,再给你靠谱的实现方案~
先指出你代码里的几个小问题
- 变量名不匹配:你定义了
refactoring_details = df['repository'],但后面用了未定义的repo_Name; to_frame参数错误:name应该传字符串(比如'repository'),而不是传Series对象;- 正则表达式为空:这就是
extract完全不起作用的核心原因。
正确的实现方案
我们需要捕获/之后的所有字符,这里提供两种实用方法:
方法1:用str.extract配合正则表达式
正则可以写r'\/(.*)',其中:
\/:转义斜杠(斜杠在正则里是特殊字符,必须转义);(.*):捕获斜杠后面的所有字符(.匹配任意字符,*匹配0次或多次)。
完整可运行代码:
import pandas as pd # 读取你的CSV数据 df = pd.read_csv('result_refactorings.csv', sep=';') # 将repository列转为DataFrame(如果需要单独处理的话) repo_df = df['repository'].to_frame(name='repository') # 提取/后的字符串,生成新列 repo_df['repo_suffix'] = repo_df['repository'].str.extract(r'\/(.*)') print(repo_df)
运行后你会得到新列repo_suffix,里面就是你想要的android-dev-sources这类目标字符串。
方法2:用str.split拆分字符串(更直观)
如果你的仓库名称格式都是用户名/仓库名这种固定结构,用split会更简单,不需要写正则:
import pandas as pd df = pd.read_csv('result_refactorings.csv', sep=';') # 按/拆分字符串,取拆分后的第2个元素(索引为1) df['repo_suffix'] = df['repository'].str.split('/', expand=True)[1] # 查看结果 print(df[['repository', 'repo_suffix']])
这个方法更适合格式固定的场景,同样能精准提取到你需要的内容。
测试示例(用你给出的样例数据)
data = {'Repository': [ 'ParaskP7/android-dev-sources', 'uholeschak/ediabaslib', 't3hk0d3/ruby_faceapp', 'prateekbh/hopon', 'c0i/cocos2d-x-v2', 'risk1996/ctg-cheat', 'GiacomoPignoni/undercover_discord_bot', 'vyasishanatc194/Crowdbotics-React-Native-Test' ]} df_test = pd.DataFrame(data) df_test['repo_suffix'] = df_test['Repository'].str.extract(r'\/(.*)') print(df_test)
运行后会输出包含正确提取后缀的DataFrame,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Oumayma Hamdi
相关产品推荐
相关产品推荐

