cover

走马

陈粒

新增行列

新增行列


一、新增列#

方法 1:直接赋值(常用)#

语法df["新列名"] = 数据/计算结果

import pandas as pd
import 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

总结#

  1. 新增列优先选「直接赋值」:简洁高效,条件赋值 / 列计算都能用;需要指定位置用insert,不想修改原 DF 用assign
  2. 新增行优先选pd.concat:效率比loc逐行新增高,尤其适合多行;单行新增且需自定义索引用loc,快速单行新增用_append
  3. 注意效率问题:Pandas 是列优先的数据分析工具,尽量避免循环逐行新增(大数据量会很慢),优先用concat合并多个行 DF。

文章目录

✨️ 复制成功,转载请标注本文地址