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

向DataFrame追加列表行为异常:为何添加两行而非一行?

解决Pandas追加列表时变成两行而非一行的问题

我完全懂你现在的困扰——本来想把[Timestamp('2018-01-01 00:00:00', freq='D'), 0]这样的列表作为一行两列的数据追加到已有两列的DataFrame里,结果执行df_final.append(pd.DataFrame(temp_arr), ignore_index=True)后,居然变成了两行单列,这确实不符合预期。

为什么会出现这个问题?

当你直接把temp_arr传入pd.DataFrame()时,Pandas会默认把这个列表里的每个元素当成单独的一行数据,而不是同一行里的两个列值。所以列表里的时间戳会成为第一行,数值0成为第二行,自然就出现了你看到的结果。

正确的解决方法

这里给你几种靠谱的实现方式,按需选择:

方法1:给列表套一层外层列表(最简单快捷)

把temp_arr放到一个更大的列表里,告诉Pandas“这是一行数据,里面的两个元素是列值”:

df_final = df_final.append(pd.DataFrame([temp_arr]), ignore_index=True)

方法2:用字典指定列名(可读性更强)

如果你的DataFrame有明确的列名(比如date和value),用字典构造单行DataFrame会更清晰,也不容易出错:

# 假设df_final的列名是['date', 'value']
new_row = pd.DataFrame({
    'date': [temp_arr[0]],
    'value': [temp_arr[1]]
})
df_final = df_final.append(new_row, ignore_index=True)

方法3:用pd.concat()替代append()(官方推荐)

从Pandas 1.4.0版本开始,append()方法已经被标记为过时(deprecated),官方推荐使用pd.concat()来实现追加操作,写法如下:

# 对应方法1的concat版本
df_final = pd.concat([df_final, pd.DataFrame([temp_arr])], ignore_index=True)

# 对应方法2的concat版本
new_row = pd.DataFrame({
    'date': [temp_arr[0]],
    'value': [temp_arr[1]]
})
df_final = pd.concat([df_final, new_row], ignore_index=True)

验证示例

我们来跑一个完整的例子确认效果:

import pandas as pd
from pandas import Timestamp

# 初始化空的两列DataFrame
df_final = pd.DataFrame(columns=['date', 'value'])

# 待追加的列表
temp_arr = [Timestamp('2018-01-01 00:00:00', freq='D'), 0]

# 用方法1追加
df_final = df_final.append(pd.DataFrame([temp_arr]), ignore_index=True)

print(df_final.head())

执行后输出的结果就是你预期的一行两列:

date  value
0 2018-01-01      0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:20:09