将长度函数应用于 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
- 新 Python
造成这种差异的原因是调用 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)
.
我有一个 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
- 新 Python
造成这种差异的原因是调用 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)
.