我想使用Pandas apply来创建一个新的列,并且我希望这个功能即使在DataFrame为空时也能失败保存。下面是一个按预期工作的最小示例:
df = pd.DataFrame(np.array([[1,2],[3,4]]), columns=['a','b']) # two columns
add = lambda x: x['a'] + x['b'] # add column a and b # add two values
df['c'] = df.apply( add, axis=1 ) # creates new column c, as anticipated
但是,当df恰好为空时,就会出现问题。考虑下面的示例,其中DataFrame为空,但其他方面相等:
df = pd.DataFrame( columns=['a','b']) # two columns, but no values
df['c'] = df.apply( add, axis=1 ) # raises an error!
如何安全地执行最后一列,使它只向DataFrame追加列'c',即使df为空也是如此?
有趣的是,这是可行的
df.apply( add, axis=1 )
但不能作为列“c”附加。
2条答案
按热度按时间nx7onnlm1#
如果要基于列
a
和b
之和创建新列c
,只需执行以下操作:这样,你就不需要给函数
add
赋值一个lambda表达式(不推荐给函数赋值一个lambda表达式)。即使 Dataframe 为空,上述方法也有效。
4urapxun2#
如果一个轴(行或列)为空,则apply函数返回空结果。
您定义的lambda函数返回一个pandas.Series。为了处理空pandas.DataFrame,有必要更明确地说明apply方法的结果类型,并使用
reduce
模式。“reduce”:如果可能,返回一个Series,而不是展开类似列表的结果。这与“expand”相反。
这将工作: