如何基于两个现有列使用 pandas 正确添加新列?

Posted

技术标签:

【中文标题】如何基于两个现有列使用 pandas 正确添加新列?【英文标题】:How to properly add a new column using pandas based on two existing columns? 【发布时间】:2017-04-04 14:11:50 【问题描述】:

我对 Python(和 pandas)完全陌生。我真的很想解决这个问题,但是,如果没有收到以下警告,我就无法解决:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

我有两列包含一个人的名字姓氏。我正在寻找一种将新列添加到包含全名 的数据框df 的方法。以下代码适用于警告:

df['Full Name'] = df['First Name'] + " " + df['Last Name']

接下来,我尝试了

df.loc[:,'Full Name'] = df.loc[:,['First Name']] + " " + df.loc[:,['Last Name']],

这是无效的。

【问题讨论】:

df['Full Name'] = df['First Name'] + " " + df['Last Name'] 上面的代码是什么? 因为df['Full Name'] = df['First Name'] + " " + df['Last Name'] 很好,而且很明显很完美。 @jezrael。谢谢你们的cmets!没错,但我仍然收到警告,这在 jupyter 笔记本中并不好。 您的df 是如何定义的? 我使用以下命令将 csv 文件读入数据框:df= pd.read_csv('...') 【参考方案1】:

首先,你可能想这样做

df.loc[:,'Full Name'] = df.loc[:,'First Name'].astype(str) + " " + df.loc[:,'Last Name'].astype(str)

df.loc[:,'Full Name'] = df.loc['First Name'].astype(str) + " " + df.loc['Last Name'].astype(str)

(.astype(str) 在你的情况下可能太多了)

那么,由于您在消息中看到的原因,您可能仍会收到警告(查看此答案Pandas still getting SettingWithCopyWarning even after using .loc)

这里的简短回答是写

 df.is_copy=False
 df.loc[:,'Full Name'] = df.loc[:,'First Name'].astype(str) + " " + df.loc[:,'Last Name'].astype(str)

【讨论】:

以上是关于如何基于两个现有列使用 pandas 正确添加新列?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Scala/Spark 添加不基于数据框中现有列的新列? [复制]

Flex3 AdvancedDataGrid:如何在现有列的基础上添加新列?

尝试在 Jupyter Notebook 上使用 Pandas 从现有列创建新列时出现 NoneType 错误

如何使用微软互操作将工作表开头的新列添加到现有 excel

如何将新列添加到现有表 symfony - orocommerce

Pandas - 基于 str 包含从另一列创建新列/值