在 Pandas 数据操作中,有效地向 DataFrame 添加多个新列可能是一项需要优雅解决方案的任务。虽然使用带有等号的列列表语法的直观方法可能看起来很简单,但它可能会导致意外的结果。
如提供的示例中所示,以下语法无法按预期创建新列:
df[['column_new_1', 'column_new_2', 'column_new_3']] = [np.nan, 'dogs', 3]
这是因为在使用列列表语法时,Pandas 要求赋值的右侧是一个 DataFrame。标量值或列表与此方法不兼容。
几种替代方法提供了同时添加多个列的可行解决方案:
方法 1:单独分配使用迭代器解包
df['column_new_1'], df['column_new_2'], df['column_new_3'] = np.nan, 'dogs', 3
方法2:展开单行以匹配索引
df[['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame([[np.nan, 'dogs', 3]], index=df.index)
方法 3:使用 pd.concat
df = pd.concat(
[
df,
pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
)
], axis=1
)
方法4:使用.join
df = df.join(pd.DataFrame(
[[np.nan, 'dogs', 3]],
index=df.index,
columns=['column_new_1', 'column_new_2', 'column_new_3']
))
方法五:使用字典作为临时DataFrame
df = df.join(pd.DataFrame(
{
'column_new_1': np.nan,
'column_new_2': 'dogs',
'column_new_3': 3
}, index=df.index
))
方法 6:使用 .assign() 与多个列参数
df = df.assign(column_new_1=np.nan, column_new_2='dogs', column_new_3=3)
方法 7:创建列,然后赋值
new_cols = ['column_new_1', 'column_new_2', 'column_new_3']
new_vals = [np.nan, 'dogs', 3]
df = df.reindex(columns=df.columns.tolist() new_cols) # add empty cols
df[new_cols] = new_vals # multi-column assignment works for existing cols
方法 8:多个顺序赋值
df['column_new_1'] = np.nan
df['column_new_2'] = 'dogs'
df['column_new_3'] = 3
选择最合适的方法将取决于 DataFrame 的大小、要添加的新列的数量以及任务的性能要求等因素。尽管如此,这些技术为 Pandas 用户提供了多种选项,可以有效地将多个列添加到他们的 DataFrame 中。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3