新增行列
一、新增列
方法 1:直接赋值(常用)
语法:df["新列名"] = 数据/计算结果
import pandas as pdimport numpy as np
data = { "姓名": ["张三", "李四", "王五", "赵六"], "年龄": [20, 25, 22,28 ], "城市": ["北京", "上海", "广州", "北京"], "薪资": [8000, 12000, 9500, 15000]}df_clean = pd.DataFrame(data,index=["员工1", "员工2", "员工3", "员工4"])df_clean.rename(columns={"姓名":"姓名1", "年龄":"年龄1", "城市":"城市1", "薪资":"薪资1"}, inplace=True)df_clean.loc["员工2", "薪资1"] = np.nan
# 新增固定值列df_clean["部门"] = "技术部" # 所有行的「部门」列都是"技术部"
# 基于现有列计算df_clean["年薪1"] = df_clean["薪资1"] * 12
# 条件赋值df_clean.loc[df_clean["薪资1"] > 10000, "薪资等级"] = "高"df_clean.loc[df_clean["薪资1"] <= 10000, "薪资等级"] = "中"
print("新增列后的结果:")print(df_clean)方法 2:loc 赋值(更明确的列定位)
语法:df.loc[:, "新列名"] = 数据
适用场景:需要明确指定「所有行」(: 代表所有行),和直接赋值效果一致,可读性更强。
# 示例:新增「税后薪资」列(假设税率10%)df_clean.loc[:, "税后薪资1"] = df_clean["薪资1"] * 0.9方法 3:insert 方法(指定位置新增列)
语法:df.insert(列索引位置, "新列名", 数据, allow_duplicates=False)
适用场景:需要指定列的插入位置(比如在「薪资 1」列后面新增列)。
# 示例:在第4列(索引3)的位置新增「奖金」列# 列索引:0=姓名1,1=年龄1,2=城市1,3=薪资1 → 插入到索引4,即薪资1后面df_clean.insert(4, "奖金", [500, 800, 600, 1000])方法 4:assign 方法(返回新 DF,不修改原 DF)
语法:新DF = 原DF.assign(新列名=计算式)
适用场景:不想修改原 DataFrame,需要生成新的 DF(链式操作友好)。
# 示例:新增「薪资+奖金」列,返回新DF,原df_clean不变df_new = df_clean.assign(总收入=df_clean["薪资1"] + df_clean["奖金"])print("\nassign新增列后的新DF:")print(df_new)print("\n原DF无变化:")print(df_clean.columns) # 看不到「总收入」列二、新增行
方法 1:loc 赋值(指定行索引新增)
语法:df.loc["新行索引"] = 行数据
适用场景:新增单行,且能自定义行索引(比如新增「员工 5」)。
# 示例:新增「员工5」行,数据按列顺序对应(姓名1、年龄1、城市1、薪资1、奖金...)df_clean.loc["员工5"] = ["钱七", 30, "深圳", 18000, 1200, np.nan, np.nan, np.nan, np.nan]print("\nloc新增员工5行后:")print(df_clean)方法 2:pd.concat(推荐,新增单行 / 多行,效率更高)
语法:pd.concat([原DF, 新行DF], ignore_index=True/False)
适用场景:新增单行 / 多行,尤其是大数据量(比逐行loc高效);ignore_index=True 会重置索引,避免重复索引。
# 示例1:新增单行(先把单行数据转成DF)new_row = pd.DataFrame({ "姓名1": ["孙八"], "年龄1": [27], "城市1": ["杭州"], "薪资1": [13000], "奖金": [900]}, index=["员工6"]) # 自定义行索引df_clean = pd.concat([df_clean, new_row], axis=0) # axis=0 表示按行合并
# 示例2:新增多行(你之前的代码就是这个逻辑)# 复制员工1行并新增到末尾df_clean = pd.concat([df_clean, df_clean.iloc[0:1]], axis=0)print("\nconcat新增行后:")print(df_clean)方法 3:_append 方法(Pandas 2.0+ 替代旧版append)
语法:df = df._append(新行数据, ignore_index=True)
适用场景:快速新增单行,语法比concat简洁(但大数据量不如concat)。
# 示例:新增员工7行(字典格式,key对应列名)new_row2 = {"姓名1": "周九", "年龄1": 29, "城市1": "成都", "薪资1": 14000, "奖金": 1100}df_clean = df_clean._append(new_row2, ignore_index=False) # False保留自定义索引(默认生成数字索引)三、新增列 vs 新增行 核心对比表
| 维度 | 新增列 | 新增行 |
|---|---|---|
| 核心语法 | 直接赋值 df["新列"]=值 | loc/pd.concat/_append |
| 操作效率 | 高(向量化操作,适合大数据) | 低(逐行操作,大数据量慎用) |
| 索引处理 | 无需关注(自动继承行索引) | 需关注(易重复索引,可设ignore_index=True) |
| 数据匹配 | 按行索引自动匹配 | 按列名自动匹配(列缺失则补 NaN) |
| 常用场景 | 列计算、条件赋值、新增标签列 | 补充单行 / 多行数据、合并小 DF |
总结
- 新增列优先选「直接赋值」:简洁高效,条件赋值 / 列计算都能用;需要指定位置用
insert,不想修改原 DF 用assign。 - 新增行优先选
pd.concat:效率比loc逐行新增高,尤其适合多行;单行新增且需自定义索引用loc,快速单行新增用_append。 - 注意效率问题:Pandas 是列优先的数据分析工具,尽量避免循环逐行新增(大数据量会很慢),优先用
concat合并多个行 DF。

















