小编Ped*_*lho的帖子

pandas df.apply意外地改变了数据帧

根据我的理解,pandas.DataFrame.apply不会在内部应用更改,我们应该使用其返回对象来保留任何更改.但是,我发现了以下不一致的行为:

让我们应用一个虚函数,以确保原始df保持不变:

>>> def foo(row: pd.Series):
...     row['b'] = '42'

>>> df = pd.DataFrame([('a0','b0'),('a1','b1')], columns=['a', 'b'])
>>> df.apply(foo, axis=1)
>>> df
    a   b
0   a0  b0
1   a1  b1
Run Code Online (Sandbox Code Playgroud)

这表现得如预期.但是,如果我们修改初始化此df的方式,foo将在适用的位置应用更改:

>>> df2 = pd.DataFrame(columns=['a', 'b'])
>>> df2['a'] = ['a0','a1']
>>> df2['b'] = ['b0','b1']
>>> df2.apply(foo, axis=1)
>>> df2
    a   b
0   a0  42
1   a1  42
Run Code Online (Sandbox Code Playgroud)

我还注意到,如果列dtypes不是'object'类型,则上述情况不正确.为什么apply()在这两个上下文中表现不同?

Python:3.6.5

熊猫:0.23.1

python dataframe pandas pandas-apply

9
推荐指数
1
解决办法
1099
查看次数

标签 统计

dataframe ×1

pandas ×1

pandas-apply ×1

python ×1