pandas28 update-用另一个DataFrame中的非NA值进行就地修改(补全全部实例 tcy)

本文深入解析Pandas中df.update()函数的使用方法及参数意义,通过多个实例展示如何利用该函数进行DataFrame的就地修改,包括左连接、覆盖策略、过滤条件等高级应用。
============================================================
1.函数

df.update(other, join='left', overwrite=True, filter_func=None, raise_conflict=False)

用途:
    # 用另一个DataFrame中的非NA值进行就地修改

参数:
    # other:DataFrame,至少有一个匹配的索引/列标签;Series必设name属性
    # join:{'left'}仅实现左连接,保留原始对象的索引和列
    # overwrite =True:处理重叠键(行索引)非NA值:
    #     * True:覆盖原始df值
    #     * False:仅更新原始df中na的值

    # filter_func:callable(1d-array) - > boolean 1d-array
    #     可替换NA以外值。返回True表示值应该更新。函数参数作用于df
    # raise_conflict=False:为True,则会在df和other同一位置都是非na值时引发ValueError
============================================================
# 实例1.1:
df = pd.DataFrame({'A': [11, 12, 13],'B': [14, 15, 16]})
new_df = pd.DataFrame({'B': [21, 22,23],'C': [24, 25, 26]})
df.update(new_df)
df
     A   B
0  11  21
1  12  22
2  13  23

# 实例1.2:df长度不会增加,仅更新匹配的索引/列标签处的值。
df = pd.DataFrame({'A': ['a1', 'a2', 'a3'], 'B': ['b1', 'b2', 'b3']})
new_df = pd.DataFrame({'B': ['c1', 'c2', 'c3', 'c4', 'c5']})
df.update(new_df)
df

    A   B
0  a1  c1
1  a2  c2
2  a3  c3

# 实例1.3:
df = pd.DataFrame({'A': [11, 12, 13],'B': [14, 15, 16]})
new_df = pd.DataFrame({'B': ['c1', 'c2', 'c3', 'c4', 'c5']})
df.update(new_df)
df

    A   B
0  11  c1
1  12  c2
2  13  c3
============================================================
# 实例2.1:对于Series,必须设置其name属性。
df = pd.DataFrame({'A': ['a1', 'a2', 'a3'], 'B': ['b1', 'b2', 'b3']})
new_column = pd.Series(['c1', 'c3'], name='B', index=[0, 2])
df.update(new_column)
df

    A   B
0  a1  c1
1  a2  b2
2  a3  c3

# 实例2.2:
df = pd.DataFrame({'A': ['a1', 'a2', 'a3'], 'B': ['b1', 'b2', 'b3']})
new_column = pd.Series(['c2', 'c3'], name='B', index=[1, 2])
df.update(new_column)
df

    A   B
0  a1  b1
1  a2  c2
2  a3  c3
============================================================
# 实例3:如果other包含NaN,则不会更新df的值
df = pd.DataFrame({'A': [11, 12, 13],'B': [14, 15, 16]})
new_df = pd.DataFrame({'B': [24, np.nan, 26]})
df.update(new_df)
df

    A     B
0  11  24.0
1  12  15.0
2  13  26.0
============================================================
# 实例4:过滤函数df>=15的值被替代
df = pd.DataFrame({'A': [11, 12, 13],'B': [14, 15, 16]})
new_df = pd.DataFrame({'B': [21, 22,23],'C': [24, 25, 26]})
df.update(new_df,filter_func=lambda  s:s>=15)
df

    A   B
0  11  14
1  12  22
2  13  23
============================================================
# 实例5.1:overwrite重复行索引
df = pd.DataFrame({'A': [11, 12, 13],'B': [14, np.nan, 16]},index=[0,1,1])
new_df = pd.DataFrame({'B': [21, 22,23],'C': [24, 25, 26]})
df.update(new_df)
df

    A     B
0  11  21.0
1  12  22.0
1  13  22.0

# 实例5.2:
 df = pd.DataFrame({'A': [11, 12, 13],'B': [14, np.nan, 16]},index=[0,1,1])
new_df = pd.DataFrame({'B': [21, 22,23],'C': [24, 25, 26]})
df.update(new_df,overwrite=True)
df

    A     B
0  11  21.0
1  12  22.0
1  13  22.0
============================================================
# 实例6.1:
df = pd.DataFrame({'A': [11, 12],'B': [np.nan, np.nan]})
new_df = pd.DataFrame({'B': [21, 22],'C': [24, 25]})
df.update(new_df,raise_conflict=True)
df

    A     B
0  11  21.0
1  12  22.0

# 实例6.2:
 df = pd.DataFrame({'A': [11, 12],'B': [13, np.nan]})
new_df = pd.DataFrame({'B': [21, 22],'C': [24, 25]})
df.update(new_df,raise_conflict=True)#ValueError;df和other同一位置都是非na值时引发ValueError

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值