Skip to content

向 Pandas DataFrame 添加新列(示例与最佳实践)

Updated on

在使用 Pandas DataFrame 时,添加新列是最常见的操作之一。无论你是要创建计算字段、在特定位置插入列,还是动态构建 DataFrame,Pandas 都提供了多种强大的方式帮助你轻松完成。

这篇 2025 年更新的指南将介绍:

  • 添加新列的 6 种最佳方法
  • 各方法适用的场景
  • 基于已有数据添加新列
  • 如何避免常见错误(例如 SettingWithCopyWarning
  • 真实场景示例

⭐ 小提示:把你的 DataFrame 变成可视化分析工具

想立刻把 DataFrame 可视化?

PyGWalker 可以在 Jupyter Notebook 中,将任意 Pandas 或 Polars DataFrame 转换成_类似 Tableau 的交互式界面_。

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
KaggleColabGitHub
Run PyGWalker in Kaggle (opens in a new tab)Run in Google Colab (opens in a new tab)Give us a ⭐️ (opens in a new tab)

什么是 Pandas DataFrame?

DataFrame 是一种二维带标签的表格结构(行 + 列),类似 Excel 或 SQL 表。Pandas 允许你从以下来源创建 DataFrame:

  • CSV
  • Excel
  • SQL
  • JSON
  • Python 列表与字典

并提供强大的 API 用于对其进行处理和分析。


📌 如何在 Pandas 中添加新列(快速概览)

方法最适合的场景示例
1. 赋值(df['col'] = ...最常见 / 最简单的情况df['salary'] = ...
2. df.insert 插入列在特定位置插入列df.insert(1, 'x', ...)
3. df.assign方法链(chaining)风格df = df.assign(x=...)
4. pd.concat 拼接一次性添加多列pd.concat([df, df2], axis=1)
5. 基于已有列计算新列各类真实业务转换df['age2'] = df['age'] * 2
6. 条件列(条件逻辑)if–else 逻辑np.where(...)

下面逐一结合示例说明。


1. 方法:简单赋值(大多数场景的首选)

df['NewColumn'] = [1, 2, 3, 4]

▶ 示例

df['Salary'] = [50000, 60000, 70000, 80000]

适用场景:

  • 最常见、语法最简单
  • 添加常数、列表、数组或计算结果

注意:

  • 如果列名已存在,会被直接覆盖
  • 性能很高

2. 方法:在指定位置插入列(df.insert

df.insert(loc=1, column='Department', value=['IT', 'HR', 'Finance', 'Admin'])

适用场景:

  • 需要精确控制列的顺序
  • 报表、导出结构化数据时很有用

3. 方法:使用 assign 添加列(函数式 / 链式写法)

df = df.assign(Tax=lambda x: x['Salary'] * 0.1)

优点:

  • 适用于方法链(如 df.query(...).assign(...).pipe(...)
  • 不会就地修改原 DataFrame,除非你把结果重新赋回

4. 方法:使用 pd.concat 添加列

df2 = pd.DataFrame({'Bonus': [1000, 2000, 2500, 1800]})
df = pd.concat([df, df2], axis=1)

适用场景:

  • 一次性拼接多列
  • 把两个 DataFrame 横向合并

不建议:

  • 只添加单个新列时使用 → 直接赋值更快、更简单

5. 基于已有列添加新列(真实业务示例)

这是最常见的使用场景——原文中没有展开说明。

示例:计算总分

df['Total'] = df['Math'] + df['Science'] + df['English']

示例:归一化某个数值

df['Age_Norm'] = df['Age'] / df['Age'].max()

6. 条件列(np.where 或布尔条件)

示例:添加 “Senior” 标记列

import numpy as np
df['Senior'] = np.where(df['Age'] >= 35, 'Yes', 'No')

布尔掩码版本

df['IsAdult'] = df['Age'] > 18

适用场景:

  • 创建分类标签
  • 简单二元条件(是 / 否、True / False)

覆盖已存在的列

可以,简单赋值会直接覆盖:

df['Age'] = [26, 31, 36, 41]

通过列名在特定位置插入列

df.insert(df.columns.get_loc("Age"), 'Score', [1, 2, 3, 4])

当列顺序依赖已有列名(例如自动化流水线中)时,这种方式会很方便。


⚠ 需要避免的常见错误:SettingWithCopyWarning

如果你用不当的方式切片 DataFrame:

subset = df[df['Age'] > 30]
subset['Flag'] = 1   # Warning!

正确写法:

subset = df[df['Age'] > 30].copy()
subset['Flag'] = 1

总结

你已经掌握了在 Pandas 中添加新列的 6 个核心方法

  • 简单赋值(默认首选方式)
  • 使用 insert 精确控制列顺序
  • 使用 assign 进行方法链式处理
  • 使用 concat 合并多个 DataFrame
  • 基于已有列进行计算生成新列
  • 基于条件逻辑创建新列

掌握这些技巧,可以更高效地操作 DataFrame,并规避常见坑。


FAQ(为 SEO 与用户支持准备)

1. 如何添加值都相同的一列?

df['Source'] = 'System'

2. 如何基于函数结果添加一列?

df['Score'] = df.apply(lambda x: x['Math'] * 0.6 + x['English'] * 0.4, axis=1)

3. 如何一次性添加多列?

df[['A', 'B']] = df[['X', 'Y']] * 2

4. 哪种方式最快?

通常简单赋值(df['col'] = ...)是最高效的方式。