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

Pandas中自定义函数生成新列异常,如何正确提取行程始发地?

问题原因与解决方法

嘿,这个问题我之前也踩过坑!核心问题在于你直接把整个df.Journey(这是一个Pandas Series对象)传给了getOrigin函数,而不是让函数逐个处理Series里的每一行数据。

为什么会出错?

当你执行getOrigin(df.Journey)时,函数里的" to " in journey判断的是字符串" to "是否存在于整个Series对象中,而不是每个单独的Journey字符串里。显然这个条件永远不成立,所以所有行都返回了"No origin"。

正确的实现方式

方法1:用apply让函数逐行处理

这是最直接适配你现有自定义函数的方式,apply会把Series中的每个元素单独传入getOrigin函数:

def getOrigin(journey):
    if " to " in journey:
        return journey.split(" to ")[0]
    else:
        return "No origin"

df['Origin'] = df['Journey'].apply(getOrigin)

方法2:更高效的Pandas向量化操作(推荐)

如果你的数据集比较大,推荐用Pandas内置的字符串方法,比apply的逐行处理效率高很多:

# 先拆分字符串取第一部分
df['Origin'] = df['Journey'].str.split(' to ', n=1).str[0]
# 对没有" to "的行填充"No origin"
df['Origin'] = df['Origin'].where(df['Journey'].str.contains(' to '), 'No origin')

测试验证

比如我们创建测试数据:

import pandas as pd
df = pd.DataFrame({'Journey': ['America to England', 'Canada to Japan', 'Australia']})

用上面任意一种方法处理后,df['Origin']的结果都会是:

0    America
1     Canada
2    No origin
Name: Origin, dtype: object

完全符合你的预期!

内容的提问来源于stack exchange,提问作者superwelling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:13:26