You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:48:04