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

时间:2017-01-21 22:10:37

标签: python pandas lambda conditional-statements apply

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

作为练习,我想使用单行代码将str.upper()方法应用于Pandas数据帧的元素,只要这些元素是字符串。

我想将lambda条件表达式与apply结合起来,但问题是当apply调用Pandas数据帧时,数据帧 - 如果我已经理解的那样 - 返回一个要应用的Series,然后将其传递给函数。我想知道如何更深入地调整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)

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

我正在寻找一种解决方案,该解决方案适用于包含数字和字符串的列,并且会保留数字。

1 个答案:

答案 0 :(得分:1)

你的单行

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

   A  B
0  1  A
1  B  2