【发布时间】:2020-12-29 18:12:39
【问题描述】:
在 Pandas DataFrame 中的应用程序中使用 lambda 函数时,我希望得到整行,但看起来我得到的是“单个元素”。
看看那个代码:
# Data sample
reviews_2 = pd.DataFrame({
'price': {0: None, 1: 15.0, 2: 14.0, 3: 13.0},
'country': {0: 'Italy', 1: 'Portugal', 2: 'US', 3: 'US'},
'points': {0: 87, 1: 87, 2: 87, 3: 87}
})
print(reviews_2)
mean_price_2 = reviews_2.price.mean() # a value to centering
def remean_points(row):
row.price = row.price - mean_price_2
return row
centered_price_2 = reviews_2.apply(remean_points, axis='columns') # returns a DataFrame
print(centered_price_2)
“应用”返回一个 DataFrame。这是我的预期输出!
所以,我尝试使用 lambda 函数,这样做:
reviews_2 = pd.DataFrame({
'price': {0: None, 1: 15.0, 2: 14.0, 3: 13.0},
'country': {0: 'Italy', 1: 'Portugal', 2: 'US', 3: 'US'},
'points': {0: 87, 1: 87, 2: 87, 3: 87}
})
print(reviews_2)
mean_price_2 = reviews_2.price.mean()
centered_price_2 = reviews_2.apply(lambda p: p.price - mean_price_2, axis='columns') # returns a Serie!
print(centered_price_2)
但是现在,“应用”返回一个 Serie!
我知道apply 会尝试识别类型。
我正在等待获得一行,但它看起来返回一个“单个元素”......
所以我的问题:
lambda函数中的
p不应该是一行?
有趣:
如果我这样做
centered_price_2 = reviews_2.apply(lambda p: p, axis='columns'),
我得到一个数据框...
还是:
如何使用
lambda和apply函数并确定输出类型?!
【问题讨论】:
-
您正在寻找的所需/期望的输出是什么?那
centered_price_2- 你需要它是什么?新专栏? -
p在 lambda 函数中是一行。问题在于返回类型的差异。第一个函数返回一个pd.Series对象,第二个函数返回一个标量。它是一个 lambda 函数的事实是无关紧要的(它几乎从不相关) -
所以,它相当于
def remean_points(row): return row.price - mean_price_2 -
@DanailPetrov 我想获得一个不同于 Kaggle 练习的 DataFrame...
-
无论如何,你几乎肯定不应该使用
.apply开始。
标签: python python-3.x pandas lambda apply