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

Pandas复制列后head()不显示,assign方法使用是否正确?

解决DataFrame使用assign添加列后head()看不到新列的问题

哦,这个问题我碰到过好多次!核心原因是你没搞清楚pandas里assign()方法的特性——它不会原地修改你的DataFrame,而是返回一个包含新列的全新DataFrame对象。你看到的输出其实是这个临时的新DataFrame,但原数据根本没被更新,所以调用head()自然看不到新列。

正确的用法:必须将assign的结果赋值回变量

要让新列真正出现在你的DataFrame里,你需要把assign()的返回值重新赋值给原变量(或者一个新变量),比如:

# 直接引用原列的方式
df = df.assign(ts=df['date'], clicks=df['y'])

或者用更优雅的lambda表达式(适合链式操作的场景):

# 使用lambda引用当前DataFrame
df = df.assign(ts=lambda x: x['date'], clicks=lambda x: x['y'])

验证效果

执行完上面的赋值语句后,再调用df.head(),你就能看到ts和clicks这两个新列了——它们分别是date和y列的副本。

常见误区提醒

别尝试给assign()加inplace=True参数!和pandas里的drop()、rename()不同,assign()方法根本没有inplace参数,原地修改的思路在这里行不通,必须通过赋值来更新数据。

举个完整的小例子演示:

import pandas as pd

# 初始化测试DataFrame
df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'y': [150, 220, 180]
})

# 错误用法:只调用assign,不赋值
df.assign(ts=df['date'], clicks=df['y'])
# 这里输出会显示带新列的DataFrame,但原df没变化

# 正确用法:赋值回原变量
df = df.assign(ts=df['date'], clicks=df['y'])

# 现在查看就能看到新列了
print(df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:06:50