我不明白这种应用行为.. Pandas 就地应用更新但返回无

>>>import pandas as pd
>>>df_test = pd.Series({0: {'A', 'E'},
                     1: {'A', 'C', 'E', 'S'},
                     2: {'A', 'C', 'E'},
                     3: {'A', 'C', 'E', 'S'},
                     4: {'A', 'E'}})
>>>df_test
0          {A, E}
1    {A, S, E, C}
2       {A, C, E}
3    {A, S, E, C}
4          {A, E}
dtype: object

>>>df_test.apply(lambda x: x.add("X"))
0    None
1    None
2    None
3    None
4    None
dtype: object

但,
>>>df_test
0          {A, X, E}
1    {A, X, S, E, C}
2       {A, X, C, E}
3    {A, X, S, E, C}
4          {A, X, E}
dtype: object

所以 df_test 更新了。但是如果我这样做:
>>> df_test = df_test.apply(lambda x: x.add("X"))
>>> df_test
0    None
1    None
2    None
3    None
4    None
dtype: object

这种行为的解释是什么 - 应用正在更新数据帧,但返回的类型是无。

最佳答案

添加到 set 是一个返回 None 的就地操作,因此当系列将被更新时,从 apply 返回的副本将在每一行中设置 None

如果您真的想在调用 apply 时查看结果,而不是添加到集合中,您可以使用两个集合的并集来获得所需的结果:

df_test.apply(lambda x: x | {'X'})

0          {A, X, E}
1    {A, X, E, C, S}
2       {A, X, E, C}
3    {A, X, E, C, S}
4          {A, X, E}

其中不修改原始系列:
df_test

0          {A, E}
1    {A, E, C, S}
2       {A, E, C}
3    {A, E, C, S}
4          {A, E}

关于python - Pandas 就地应用更新但返回无,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51310263/

10-12 12:41
查看更多