You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以非弃用的简洁方式向DataFrame单列追加Series或数组?

问题描述

我有一个包含多列的DataFrame和一个Series,想要将该Series追加到DataFrame的指定列末尾,同时让其他列对应位置的值设为NaN,且不与原有数据合并。已知append方法已被弃用,目前自己的实现方式在列数较多时过于繁琐,想找更简洁的替代方案。

现有实现(仅适合列数少的场景):

import pandas as pd
import numpy as np

a = pd.DataFrame({'one': [1, 2, 3], 'two': [4, 5, 6]})
b = pd.Series([7, 8, 9], name='two')
pd.concat([a, pd.DataFrame({'one': np.nan, 'two': b})], ignore_index=True)

预期效果:

one  two
0   1.0    4
1   2.0    5
2   3.0    6
3   NaN    7
4   NaN    8
5   NaN    9
简洁解决方案

核心思路是先将Series转为单列DataFrame,再通过列对齐自动填充其他列为NaN,最后与原DataFrame拼接,无需手动指定每一列的NaN值。

方法1:通用多列场景方案

利用reindex自动对齐原DataFrame的所有列,不管列数多少都能一键处理:

import pandas as pd
import numpy as np

a = pd.DataFrame({'one': [1, 2, 3], 'two': [4, 5, 6]})
b = pd.Series([7, 8, 9], name='two')

# 将Series转为DataFrame,对齐原DataFrame的所有列(未匹配列自动填充NaN)
b_df = b.to_frame().reindex(a.columns, axis=1)
# 拼接数据并重置索引
result = pd.concat([a, b_df], ignore_index=True)
print(result)

输出与预期完全一致,且无需手动维护列名,适配任意列数的DataFrame。

方法2:避免整数列自动转为float(可选)

由于NaN的存在,pandas默认会将整数列转为float类型。如果需要保留整数类型,可以使用pandas的Nullable整数类型:

# 定义DataFrame时使用Nullable int类型
a = pd.DataFrame({
    'one': pd.Series([1, 2, 3], dtype='Int64'),
    'two': pd.Series([4, 5, 6], dtype='Int64')
})
b = pd.Series([7, 8, 9], name='two', dtype='Int64')

b_df = b.to_frame().reindex(a.columns, axis=1)
result = pd.concat([a, b_df], ignore_index=True)
print(result)

输出:

one  two
0    1    4
1    2    5
2    3    6
3  NaN    7
4  NaN    8
5  NaN    9

此时one列保持Int64(Nullable整数)类型,不会被强制转为float。

补充说明
  • reindex(a.columns, axis=1)会严格按照原DataFrame的列顺序排列新数据,并自动填充缺失列为NaN,完美适配多列场景。
  • pd.concat是官方推荐的append替代方法,功能更灵活,是当前pandas版本中合并数据的标准方式。

内容的提问来源于stack exchange,提问作者Mivina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:35:44