This question already has answers here:
Why does pandas apply calculate twice

(3个答案)


在6个月前关闭。




我有一个函数的两个版本,它们使用Pandas逐行地通过Python 2.7进行操作。

第一个版本在inputs.csv上使用Series.apply(),并按预期遍历每一行。

第二个版本在single column上使用DataFrame.apply(),由于某种原因,它两次读取第一行。然后,它继续执行其余行而不重复。

有什么想法为什么后者要读两次第一行?

版本1 – multiple columns(一次读第一行)
import pandas as pd
df = pd.read_csv(inputs.csv, delimiter=",")

def v1(x):
    y = x
    return pd.Series(y)
df["Y"] = df["X"].apply(v1)

版本#2 – Series.apply()(读取第一行两次)
import pandas as pd
df = pd.read_csv(inputs.csv, delimiter=",")

def v2(f):
    y = f["X"]
    return pd.Series(y)
df["Y"] = df[(["X", "Z"])].apply(v2, axis=1)
DataFrame.apply():
v1(x):            v2(f):

    Row_1         Row_1
    Row_2         Row_1
    Row_3         Row_2
                  Row_3

最佳答案

这是设计使然,如herehere所述

Apply函数需要知道返回数据的形状,以智能地确定如何将其组合。 Apply是一种快捷方式,可以智能地应用聚合,转换或过滤。您可以尝试将函数分开,这样可以避免重复调用。

07-24 09:52
查看更多