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

如何用Pandas为短DataFrame添加前导零以匹配长数据行数

解决方案:为Pandas时序数据前导补零对齐行数

核心思路

要实现前导补零而非末尾补零,关键是先让两个数据集的索引/行号完全对齐,让缺失值出现在data_1的开头,再填充0。

示例代码(时间戳索引场景)

import pandas as pd
from io import StringIO

# 模拟用户的时序数据场景
data_0_str = """timestamp,value_0
2023-01-01,10
2023-01-02,20
2023-01-03,30
2023-01-04,40
2023-01-05,50"""

data_1_str = """timestamp,value_1
2023-01-03,100
2023-01-04,200
2023-01-05,300"""

# 加载数据并将时间设为索引(保证时序对齐)
data_0 = pd.read_csv(StringIO(data_0_str), parse_dates=['timestamp'], index_col='timestamp')
data_1 = pd.read_csv(StringIO(data_1_str), parse_dates=['timestamp'], index_col='timestamp')

# 1. 重新索引data_1,使其与data_0的时间索引完全匹配
data_1_reindexed = data_1.reindex(data_0.index)
# 2. 将开头的缺失值填充为0
data_1_filled = data_1_reindexed.fillna(0)
# 3. 合并数据集
merged_data = pd.concat([data_0, data_1_filled], axis=1)

print(merged_data)

示例代码(整数行号场景)

如果你的时序数据没有时间戳,仅按行号顺序排列:

import pandas as pd
from io import StringIO

data_0_str = """value_0
10
20
30
40
50"""

data_1_str = """value_1
100
200
300"""

data_0 = pd.read_csv(StringIO(data_0_str))
data_1 = pd.read_csv(StringIO(data_1_str))

# 重新索引到data_0的行数范围
data_1_reindexed = data_1.reindex(range(len(data_0)))
# 填充前导缺失值为0
data_1_filled = data_1_reindexed.fillna(0)
merged_data = pd.concat([data_0, data_1_filled], axis=1)

print(merged_data)

关键说明

  • 之前用fillna出现末尾补零,是因为直接合并时缺失值出现在data_1的末尾(行数不足补NaN),而reindex会让缺失值出现在data_1的开头(对应data_0早于data_1起始时间的行)。
  • 无需预先知晓数据集长度,len(data_0)或data_0.index会自动获取目标行数/索引范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:13:21