Pandas2.2 DataFrame
Combining comparing joining merging
方法 | 描述 |
---|---|
DataFrame.assign(**kwargs) | 用于向 DataFrame 添加新列或替换现有列的方法 |
DataFrame.compare(other[, align_axis, …]) | 用于比较两个 DataFrame 的差异的方法 |
DataFrame.join(other[, on, how, lsuffix, …]) | 用于**将两个 DataFrame 按列合并(默认按行索引对齐)**的方法 |
DataFrame.merge(right[, how, on, left_on, …]) | 用于**基于一个或多个键将两个 DataFrame 进行数据库风格的合并(join)**的方法 |
DataFrame.update(other[, join, overwrite, …]) | 用于就地(in-place)更新 DataFrame 中数据的方法 |
pandas.DataFrame.update()
pandas.DataFrame.update()
是一个用于就地(in-place)更新 DataFrame 中数据的方法。它会根据另一个 DataFrame 或 Series 的值来更新当前 DataFrame 中的对应位置数据。
默认情况下,它不会修改原始 DataFrame 的形状(即不新增列),只更新交集部分的数据。
####📌 方法签名
DataFrame.update(other, join='left', overwrite=True, filter_func=None, errors='ignore')
🔧 参数说明:
参数 | 说明 |
---|---|
other |
要用来更新当前 DataFrame 的另一个 DataFrame 或 Series |
join |
合并方式,默认 'left' (仅更新索引匹配的行) |
overwrite |
是否用 other 中的值覆盖当前 DataFrame 的值,默认 True |
filter_func |
可选函数,用于过滤哪些值可以被更新 |
errors |
当 other 和当前 DataFrame 列不匹配时的行为,可选 'ignore' , 'raise' |
✅ 返回值
- 无返回值,该方法直接修改原始 DataFrame(in-place)
🧪 示例代码及结果
示例 1:基本使用(默认参数)
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
other = pd.DataFrame({
'A': [10, 20, 30],
'B': [40, 50, 60]
})
# 更新 df
df.update(other)
print(df)
输出:
A B
0 10 40
1 20 50
2 30 60
示例 2:部分更新(只有部分列匹配)
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
other = pd.DataFrame({
'B': [40, 50, 60],
'C': [70, 80, 90]
})
df.update(other)
print(df)
输出:
A B
0 1 40
1 2 50
2 3 60
注意:列
C
不在df
中,因此被忽略(因为errors='ignore'
)
示例 3:不覆盖某些值(使用 overwrite=False
)
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
other = pd.DataFrame({
'A': [10, 20, 30],
'B': [40, 50, 60]
})
df.update(other, overwrite=False)
print(df)
输出:
A B
0 1 4
1 2 5
2 3 6
因为
overwrite=False
,所以没有更新任何值。
示例 4:使用 filter_func
过滤更新条件
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
other = pd.DataFrame({
'A': [10, 20, 30],
'B': [40, 50, 60]
})
# 只更新大于 20 的值
df.update(other, filter_func=lambda x: x > 20)
print(df)
输出:
A B
0 1 4
1 20 50
2 30 60
🧠 应用场景
场景 | 说明 |
---|---|
数据修复 | 替换错误或过时的数据 |
增量更新 | 将新数据合并到现有数据集中 |
特征工程 | 在已有特征基础上进行局部修正 |
数据同步 | 同步两个数据源之间的差异 |
模型预测更新 | 用模型输出替换旧标签或预测值 |
⚠️ 注意事项
update()
是 in-place 操作,会直接修改原 DataFrame;- 默认行为是只更新交集列和交集索引;
- 若列名不匹配,默认忽略(除非设置
errors='raise'
); - 不建议用于添加新列,更适合更新已有列;
filter_func
需要返回布尔值,用于控制是否更新某值;
✅ 总结对比
方法 | 是否 in-place | 支持列新增 | 更适合场景 |
---|---|---|---|
df.update() |
✅ | ❌ | 数据更新、修复 |
df.merge() |
❌ | ✅ | 复杂连接、SQL 式 JOIN |
df.join() |
❌ | ✅ | 索引对齐拼接 |
assign() |
❌ | ✅ | 添加/替换列,链式调用 |
如果你希望就地更新 DataFrame 中的部分数据而不改变其整体结构,update()
是非常实用的方法。