如何在pandas中使用apply调用自定义analysis函数处理dataframe路径列
示例代码
1. 单返回值场景
你不需要额外套lambda,直接把自定义的analysis函数传给apply方法即可,apply会自动将paths列的每行值作为入参传入函数:
import pandas as pd # 你的自定义分析函数 def analysis(path): # 这里替换为你的实际分析逻辑 with open(path, 'r', encoding='utf-8') as f: content = f.read() # 示例返回单个值:文件内容长度 return len(content) # 示例DataFrame df = pd.DataFrame({ 'labels': ['样本1', '样本2', '样本3'], 'paths': ['./test1.txt', './test2.txt', './test3.txt'] }) # 直接新增列存储返回结果 df['content_len'] = df['paths'].apply(analysis)
2. 多返回值场景
如果你的analysis函数返回多个值,可以直接将返回结果展开为多列,不需要额外处理:
# 支持多返回值的自定义函数 def analysis(path): with open(path, 'r', encoding='utf-8') as f: lines = f.readlines() content_len = sum(len(line) for line in lines) line_count = len(lines) first_line = lines[0].strip() if lines else None # 返回三个值 return content_len, line_count, first_line # 方式1:先存为元组列,后续按需取值 df['analysis_res'] = df['paths'].apply(analysis) # 提取第一个返回值 df['content_len'] = df['analysis_res'].str[0] # 方式2:直接展开为多列,一步到位(推荐) df[['content_len', 'line_count', 'first_line']] = df['paths'].apply(analysis, result_type='expand')
额外说明
如果你的自定义函数除了路径外还有其他入参,直接通过apply的args参数传递即可,依然不需要套lambda:
# 带额外参数的函数 def analysis(path, encoding, ignore_line_break): with open(path, 'r', encoding=encoding) as f: content = f.read() if ignore_line_break: content = content.replace('\n', '') return len(content) # 传入额外参数,args按位置顺序传入元组即可 df['content_len'] = df['paths'].apply(analysis, args=('gbk', True))
内容的提问来源于stack exchange,提问作者Stefano
相关产品推荐
相关产品推荐

