将长度函数应用于 Dataframe 的 Lambda 函数给出不同的输出

Lambda function applying length function to Dataframe gives different output

我有一个 Pandas 数据框: 我想计算行索引 = 4 中每个单元格的长度。 我执行了 2 个命令,但都给出了不同的答案。有人可以解释这里发生了什么吗

    a   b   c   d   e   f   g
0   1   2   3   4   5   6   first
1   3   4   5   6   7   8   second
2   6   7   8   9   10  11  third
3   first   second  third   fourth  fifth   sixth   fourth
4   column  column  column  column  column  column  fifth

First Command:
**df2.loc[4].apply(lambda x: len(x))**
Output:
a    6
b    6
c    6
d    6
e    6
f    6
g    5
Name: 4, dtype: int64

Second Command:
**df2.loc[4:].apply(lambda x: len(x))**
Output:
a    1
b    1
c    1
d    1
e    1
f    1
g    1
dtype: int64

造成这种差异的原因是调用 df2.loc[4] 会产生一个 Series(有 7 个元素),而调用 df2.loc[4:]4: 是一个 slice) 产生一个 DataFrame (有 1 行和 7 列)。尝试对两者使用 print()type() 以查看差异。

  • 在一个系列上,apply 会根据系列的值调用您的函数,因此您确实得到了您想要的字符串值的长度。

  • 在 DataFrame 上,apply 在每一列上调用你的函数,计算列中元素(行)的数量,它是 1 因为 [4:] 切片定义单行(尝试 [2:5],你会得到 3 而不是 1)。

顺便说一句,您的 lambda 函数与 len 函数相同,因此您可以只写 .apply(len).