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
相关产品推荐
相关产品推荐

