即使DataFrame为空,也使用Pandas.apply()创建新列

tjjdgumg  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(178)

我想使用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”附加。

nx7onnlm

nx7onnlm1#

如果要基于列ab之和创建新列c,只需执行以下操作:

df['c'] = df['a'] + df['b']  # creates new column c, as anticipated :)

这样,你就不需要给函数add赋值一个lambda表达式(不推荐给函数赋值一个lambda表达式)。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.array([[1, 2], [3, 4]]), columns=['a', 'b'])  # two columns
print(df)
   a  b
0  1  2
1  3  4

df['c'] = df['a'] + df['b']  # creates new column c, as anticipated
print(df)
   a  b  c
0  1  2  3
1  3  4  7

df = pd.DataFrame(columns=['a', 'b'])  # two columns, but no values
df['c'] = df['a'] + df['b']  # creates new column c, as anticipated
print(df)
Empty DataFrame
Columns: [a, b, c]
Index: []

即使 Dataframe 为空,上述方法也有效。

4urapxun

4urapxun2#

如果一个轴(行或列)为空,则apply函数返回空结果。
您定义的lambda函数返回一个pandas.Series。为了处理空pandas.DataFrame,有必要更明确地说明apply方法的结果类型,并使用reduce模式。
“reduce”:如果可能,返回一个Series,而不是展开类似列表的结果。这与“expand”相反。
这将工作:

df = pd.DataFrame(columns=['a','b'])
df['c'] = df.apply(add, axis=1, result_type='reduce')

相关问题