尝试使用lambda函数时Pandas赋值方法错误

jk9hmnmh  于 2022-12-10  发布在  其他
关注(0)|答案(1)|浏览(130)

我正在尝试将origin列更改为“Europe”,如果它是europe,则按原样返回原始列值。我可以使用map、np、where等来完成此操作,但我需要使用赋值方法使用lambda函数来完成此操作。我得到了值错误。如果有人能帮助我修复此错误,我将不胜感激。

import pandas as pd
import seaborn as sns
df = sns.load_dataset("mpg")
df.assign(origin = lambda df: 'Europe' if df['origin']=='europe' else df['origin'] )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
xnifntxz

xnifntxz1#

具有以下玩具数据框:

import pandas as pd

df = pd.DataFrame(
    {"rank": [1, 2, 3, 4, 5], "origin": ["usa", "jpn", "europe", "euro", "usa"]}
)

print(df)
# Output
   rank  origin
0     1     usa
1     2     jpn
2     3  europe
3     4    euro
4     5     usa

以下是修复代码的方法:

df = df.assign(
    origin=df.apply(
        lambda x: "Europe" if x["origin"] == "europe" else x["origin"], axis=1
    )
)

或者更好:

df = df.assign(origin=df["origin"].replace("europe", "Europe"))

无论如何,在这两种情况下,您都会得到:

print(df)
# Output
   rank  origin
0     1     usa
1     2     jpn
2     3  Europe
3     4    euro
4     5     usa

相关问题