如何在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)
处理后结果
| id | title | url |
|---|---|---|
| 23 | xyz | https://www.cl.com/23/xyz |
| 34 | kij | https://www.cl.com/34/kij |
| 123 | hyu | https://www.cl.com/123/hyu |
| 45 | NaN | NaN |
| 345 | None | NaN |
如果需要空值显示为None而非NaN,只需把返回的np.nan替换为None即可。
内容的提问来源于stack exchange,提问作者emiley mille
相关产品推荐
相关产品推荐

