pandas.DataFrame.update#
- DataFrame.update(other, join='left', overwrite=True, filter_func=None, errors='ignore')[源代码][源代码]#
使用另一个DataFrame中的非NA值就地修改。
对齐索引。没有返回值。
- 参数:
- 其他DataFrame,或可强制转换为 DataFrame 的对象
应该至少有一个与原始 DataFrame 匹配的索引/列标签。如果传递的是一个 Series,则其 name 属性必须设置,并且该名称将用作与原始 DataFrame 对齐的列名。
- join{‘left’}, 默认 ‘left’
仅实现了左连接,保留原始对象的索引和列。
- 覆盖布尔值, 默认为 True
如何处理重叠键的非NA值:
True: 用 other 的值覆盖原始 DataFrame 的值。
False: 仅更新原始 DataFrame 中为 NA 的值。
- filter_funccallable(1d-array) -> bool 1d-array, 可选
可以选择替换除NA以外的值。对于应该更新的值返回True。
- 错误{‘raise’, ‘ignore’}, 默认 ‘ignore’
如果是 ‘raise’,如果 DataFrame 和 other 在相同位置都包含非 NA 数据,将引发 ValueError。
- 返回:
- None
此方法直接更改调用对象。
- 引发:
- ValueError
当 errors=’raise’ 并且存在重叠的非NA数据时。
当 errors 不是 ‘ignore’ 或 ‘raise’ 时
- NotImplementedError
如果 join != ‘left’
参见
dict.update
字典的类似方法。
DataFrame.merge
对于列对列的操作。
备注
不支持 other 上的重复索引,并且会引发 ValueError。
示例
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [400, 500, 600]}) >>> new_df = pd.DataFrame({"B": [4, 5, 6], "C": [7, 8, 9]}) >>> df.update(new_df) >>> df A B 0 1 4 1 2 5 2 3 6
DataFrame 的长度不会因为更新而增加,只有匹配索引/列标签的值才会被更新。
>>> df = pd.DataFrame({"A": ["a", "b", "c"], "B": ["x", "y", "z"]}) >>> new_df = pd.DataFrame({"B": ["d", "e", "f", "g", "h", "i"]}) >>> df.update(new_df) >>> df A B 0 a d 1 b e 2 c f
>>> df = pd.DataFrame({"A": ["a", "b", "c"], "B": ["x", "y", "z"]}) >>> new_df = pd.DataFrame({"B": ["d", "f"]}, index=[0, 2]) >>> df.update(new_df) >>> df A B 0 a d 1 b y 2 c f
对于 Series,必须设置其 name 属性。
>>> df = pd.DataFrame({"A": ["a", "b", "c"], "B": ["x", "y", "z"]}) >>> new_column = pd.Series(["d", "e", "f"], name="B") >>> df.update(new_column) >>> df A B 0 a d 1 b e 2 c f
如果 other 包含 NaN,则原始数据框中相应的值不会更新。
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [400.0, 500.0, 600.0]}) >>> new_df = pd.DataFrame({"B": [4, np.nan, 6]}) >>> df.update(new_df) >>> df A B 0 1 4.0 1 2 500.0 2 3 6.0