python更新pandas_python pandas DataFrame.update用法及代码示例

这篇博客介绍了Python pandas DataFrame的update方法,用于就地更新数据,保持原索引和列对齐。讨论了参数如join、overwrite、filter_func和errors的用法,并给出了多个示例,包括DataFrame和Series的更新操作,以及如何处理非NA值和NaN值的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用来自另一个DataFrame的非NA值就地进行修改。

在索引上对齐。没有返回值。

参数:

other:DataFrame, 或 object coercible into a DataFrame至少应有一个与原始DataFrame匹配的索引/列标签。如果传递了Series,则必须设置其name属性,并将其用作列名以与原始DataFrame对齐。

join:{‘left’}, 默认为 ‘left’仅实现左连接,保留原始对象的索引和列。

overwrite:bool, 默认为 True如何处理重叠键的非NA值:

True:使用中的值覆盖原始DataFrame的值other。

False:仅更新原始DataFrame中NA的值。

filter_func:callable(1d-array) -> bool 1d-array, 可选参数可以选择替换NA以外的值。对于应更新的值,返回True。

errors:{‘raise’, ‘ignore’}, 默认为 ‘ignore’如果‘raise’,则在DataFrame和other两者都在同一位置包含非NA数据。

在版本0.24.0中更改:从改变raise_conflict=False|True至errors=’ignore’|’raise’。

返回值:

None:方法直接更改调用对象

异常:

ValueError当errors=’raise’并且有重叠的非NA数据。

当errors也不是‘ignore’或者‘raise’

NotImplementedError如果加入!= ‘left’

例子:

>>> 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

对于 Series ,必须设置其名称属性。

>>> df = pd.DataFrame({'A': ['a', 'b', 'c'],

... 'B': ['x', 'y', 'z']})

>>> new_column = pd.Series(['d', 'e'], name='B', index=[0, 2])

>>> df.update(new_column)

>>> df

A B

0 a d

1 b y

2 c e

>>> df = pd.DataFrame({'A': ['a', 'b', 'c'],

... 'B': ['x', 'y', 'z']})

>>> new_df = pd.DataFrame({'B': ['d', 'e']}, index=[1, 2])

>>> df.update(new_df)

>>> df

A B

0 a x

1 b d

2 c e

如果other包含NaN,相应的值不会在原始数据帧中更新。

>>> df = pd.DataFrame({'A': [1, 2, 3],

... 'B': [400, 500, 600]})

>>> 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值