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

如何在Python DataFrame中将列值映射生成新URL列?

问题解决:生成DataFrame的URL列(处理空值)

问题根源

你写的代码之所以所有行结果相同,是因为直接把整个df['id']、df['title'] Series转为字符串,拼接的是整个列的文本表示(比如类似0 23\n1 34\n2 123\n...),而非逐行取出每个元素进行拼接。

正确实现方法

以下两种方法都能达成你的需求:

方法1:用apply逐行处理

这种方式逻辑清晰,便于扩展复杂判断:

import pandas as pd
import numpy as np

# 构造示例DataFrame(可替换为你的实际数据)
df = pd.DataFrame({
    'id': [23, 34, 123, 45, 345],
    'title': ['xyz', 'kij', 'hyu', np.nan, None]
})

def build_url(row):
    if pd.isna(row['title']):
        return np.nan
    return f"https://www.cl.com/{row['id']}/{row['title']}"

df['url'] = df.apply(build_url, axis=1)

方法2:字符串拼接结合where过滤空值

这种方式更简洁,适合简单场景:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'id': [23, 34, 123, 45, 345],
    'title': ['xyz', 'kij', 'hyu', np.nan, None]
})

# 先拼接所有行的URL
df['url'] = "https://www.cl.com/" + df['id'].astype(str) + "/" + df['title'].astype(str)
# 将title为空的行的URL设为缺失值
df['url'] = df['url'].where(df['title'].notna(), np.nan)

处理后结果

idtitleurl
23xyzhttps://www.cl.com/23/xyz
34kijhttps://www.cl.com/34/kij
123hyuhttps://www.cl.com/123/hyu
45NaNNaN
345NoneNaN

如果需要空值显示为None而非NaN,只需把返回的np.nan替换为None即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:54:51