熊猫在原位应用更新,但不返回任何值

时间:2018-07-12 16:11:21

标签: python pandas dataframe data-manipulation

我不了解这种应用行为。.熊猫在适当位置应用更新,但返回None

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

对此行为的解释是什么-应用正在就地更新数据帧,但返回的类型为“无”。

2 个答案:

答案 0 :(得分:3)

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

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

None

不修改原始系列:

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}

答案 1 :(得分:1)

您在应用函数内部的python集合上进行操作。使用add是对该集合的就地操作,并且它(add函数)返回None。 要执行您想要的操作,可以执行以下操作:

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

这将返回一个新集合,即原始集合加上X,每行。