按元素在 Pandas 数据框上应用条件

gk7*_*gk7 6 python lambda apply conditional-statements pandas

我正在学习 Python,我试图了解 apply() 方法在 Pandas 数据帧中的工作原理。

作为练习,我想使用一行代码将 str.upper() 方法应用于 Pandas 数据框的元素,仅当这些元素是字符串时。

我想将 lambda 条件表达式与 apply 结合起来,但问题是当 apply 调用 Pandas 数据帧时,数据帧——如果我理解得很好——返回一个要应用的系列,然后将它传递给函数。我想知道如何更深入地调用 Pandas 数据框元素上的函数。

这就是我在对 DataFrame 的列(系列)调用 apply() 时按我的意图执行的操作:

df= pd.DataFrame([[1, 'a'],['b',2]], columns = ['A', 'B'] )
df['A'].apply(lambda x: str.upper(x) if type(x) is str else x)
Run Code Online (Sandbox Code Playgroud)

但是我怎么能用一行代码在整个数据帧上做到这一点呢?

我正在寻找一种解决方案,该解决方案可以处理包含数字和字符串的列,并且可以保持数字不变。

piR*_*red 5

你的单线

df.applymap(lambda x: x.upper() if isinstance(x, str) else x)

   A  B
0  1  A
1  B  2
Run Code Online (Sandbox Code Playgroud)

  • 如果这是在 Python 3 之前,OP 应该在 `isinstance()` 中使用 `basestring` 而不是 `str` (2认同)