按元素对 Pandas 数据框应用条件
Apply with a condition on a Pandas dataframe elementwise
我正在学习 Python,我试图了解 apply() 方法在 Pandas 数据帧中的工作原理。
作为练习,我想使用单行代码将 str.upper() 方法应用于 Pandas 数据框的元素,前提是这些元素是字符串。
我想将 lambda 条件表达式与 apply 结合起来,但问题是当 apply 调用 Pandas 数据帧时,数据帧——如果我理解得很好的话——returns 一个 Series 到apply 然后将其传递给函数。我想知道如何更深入地调用 Pandas 数据框元素上的函数。
这就是我在 apply() 调用 DataFrame(一个系列)的列时按照我的意图做的事情:
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)
但是我如何用一行代码在整个数据帧上做到这一点呢?
我正在寻找一种解决方案,该解决方案可以处理同时包含数字和字符串的列,并且可以使数字保持不变。
你的one-liner
df.applymap(lambda x: x.upper() if isinstance(x, str) else x)
A B
0 1 A
1 B 2
我正在学习 Python,我试图了解 apply() 方法在 Pandas 数据帧中的工作原理。
作为练习,我想使用单行代码将 str.upper() 方法应用于 Pandas 数据框的元素,前提是这些元素是字符串。
我想将 lambda 条件表达式与 apply 结合起来,但问题是当 apply 调用 Pandas 数据帧时,数据帧——如果我理解得很好的话——returns 一个 Series 到apply 然后将其传递给函数。我想知道如何更深入地调用 Pandas 数据框元素上的函数。
这就是我在 apply() 调用 DataFrame(一个系列)的列时按照我的意图做的事情:
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)
但是我如何用一行代码在整个数据帧上做到这一点呢?
我正在寻找一种解决方案,该解决方案可以处理同时包含数字和字符串的列,并且可以使数字保持不变。
你的one-liner
df.applymap(lambda x: x.upper() if isinstance(x, str) else x)
A B
0 1 A
1 B 2