【发布时间】:2021-09-01 21:50:55
【问题描述】:
我正在尝试通过函数处理和更新数据框中的行,并返回数据框以完成使用它。当我尝试将数据框返回到原始函数调用时,它返回一个系列而不是预期的列更新。下面是一个简单的例子:
df = pd.DataFrame(['adam', 'ed', 'dra','dave','sed','mike'], index =
['a', 'b', 'c', 'd', 'e', 'f'], columns=['A'])
def get_item(data):
comb=pd.DataFrame()
comb['Newfield'] = data #create new columns
comb['AnotherNewfield'] = 'y'
return pd.DataFrame(comb)
使用 apply 调用函数:
>>> newdf = df['A'].apply(get_item)
>>> newdf
a A Newfield AnotherNewfield
a adam st...
b A Newfield AnotherNewfield
e sed st...
c A Newfield AnotherNewfield
d dave st...
d A Newfield AnotherNewfield
d dave st...
e A Newfield AnotherNewfield
s NaN st...
f A Newfield AnotherNewfield
m NaN str(...
Name: A, dtype: object
>>> type(newdf)
<class 'pandas.core.series.Series'>
我认为 apply() 在这里不好,但我不太确定我“应该”如何通过函数更新这个数据框。
编辑:我很抱歉,但我似乎在编辑时不小心删除了示例函数。当我尝试在其他帖子中找到的其他一些东西时,将其添加回此处。
以稍微不同的方式对单个变量进行测试 - 并返回多个系列变量 -> 似乎可行,所以我会看看这是否是我在实际案例中可以做的事情并进行更新。
def get_item(data):
value = data #create new columns
AnotherNewfield = 'y'
return pd.Series(value),pd.Series(AnotherNewfield)
df['B'], df['C'] = zip(*df['A'].apply(get_item))
【问题讨论】:
-
df['A'] = df['A'].apply(get_item) -
感谢您的回复 - 似乎这只会返回一列 A 对吗?本质上是希望返回新列以及数据框。你是说我可能需要单独做每一列?
-
鼓的答案没有返回任何东西。它修改数据框的
'A'列,而不是将修改后的系列分配给新变量。 -
您的数据框存储在
A列中,因此您拥有一系列数据框。 -
是的,似乎是这样。我能够得到一些接近我想要的东西(即,如果我创建新列,返回它们)使用这个: def get_item(data): value = data #create new columns AnotherNewfield = 'y' return pd. Series(value),pd.Series(AnotherNewfield) df['B'], df['C'] = zip(*df['A'].apply(get_item)) -> 看看我能不能这样做适用于我的实际代码并重新更新。