python - 为什么 pandas 在 `apply` 中对这两个字符串的处理方式不同?

标签 python pandas string

我想知道为什么 pandas 以不同的方式对待两个 lambda l3l4 - 都接受一个参数,都返回一个字符串,并且都永远不应该被执行,因为 df 实际上是空的:

import pandas as pd

df = pd.DataFrame(data={"col1": [], "col2": []})

l3 = lambda r: ""
l4 = lambda r: f"{r.col1}"

df["col3"] = df.apply(l3, axis=1)
df["col4"] = df.apply(l4, axis=1)  # Error: Wrong number of items passed 3, placement implies 1

print(type(df.apply(l3, axis=1)))  # this is a Series
print(type(df.apply(l4, axis=1)))  # this is a DataFrame

然而,df.apply 的返回类型不同。

奖励问题:有没有更好的方法

df["col4"] = df.apply(l4, axis=1)

这适用于空数据框吗?

更新:我相信 pandas 代码的相关部分是这样的:

https://github.com/pandas-dev/pandas/blob/8e07787bc1030e5d13d3ad5e83b5d060a519ef67/pandas/core/apply.py#L718-L753

根据@mozway 的回答,该函数应用于一个空系列,并根据这是否有效,返回生成的新系列或输入的副本(这是一个数据框)。

根据@Brandt 的评论,可能应该确保该函数也适用于空行(这是一个奇怪的,至少是未记录的要求)。

最佳答案

您应该添加 result_type='reduce' 参数以避免扩展到 DataFrame:

df = pd.DataFrame(data={"col1": [], "col2": []})

l3 = lambda r: ""
l4 = lambda r: f"{r.col1}"

df["col3"] = df.apply(l3, axis=1)
df["col4"] = df.apply(l4, axis=1, result_type='reduce')

关于python - 为什么 pandas 在 `apply` 中对这两个字符串的处理方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69041513/

相关文章:

python - 使用 Python Mechanize 与 Flash 交互

Python Pyramid 增加请求超时

python - 在python中计算多边形的长度

python - Numpy 将整数转为小数

python - 在 plotly 中更改分组条形图的组内顺序

python - Django – 在模板标签中使用模板标签?

python - Groupby 包含两个特定值 - pandas

java - 当字符串在 Java 8 中没有分隔符时,根据提供的键从字符串创建映射

python - 从具有匹配词的主列表生成列表,无论顺序如何

c - 学习C编程基础知识,可以消除我对数组和字符串的疑惑