如何基于两个现有列使用 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 错误