使用Pandas系列的Python多重赋值

2024-10-01 02:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

出于性能原因,我想一次填写两列。 源列中的示例值为“42844-News-BENL”。我需要摘录'42844'和'News'。可以忽略其他值

df["_site_id"], df["_site_name"], rest = df["website"].apply(lambda x: x.split(" - ", 2))

我测试了这段代码,得到了一个“ValueError:太多的值无法解包(预期为3)”


Tags: lambda代码namerestid示例dfsite
2条回答

让我们做str.split

df["website"].str.split(" - ", 2, expand=True)
#df=df.join(df["website"].str.split(" - ", 2, expand=True).rename(columns={0:'_site_id', 1:'_site_name'}))

对于熊猫中的矢量化字符串操作,您有str。因此,您可以使用Series.str.split。此外,为了使此分配生效,您必须首先将结果列表“展开”为n个新列,因此设置expand=True

df["_site_id"], df["_site_name"], _ = df.website.str.split(' - ', 2, expand=True)

这也可以通过在列列表上编制索引和在lhs上显示以下内容来实现:

*df[['_site_id', '_site_name']], _ = df.website.str.split(' - ', 2, expand=True)

注意:要使多个赋值有效,分割website的结果必须是3列,否则您将得到一个ValueError表示没有足够的值进行解压缩

相关问题 更多 >