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

如何在Python的DataFrame相邻行间插入6个插值行以扩展数据?

解决DataFrame相邻行间插入插值的批量实现方法

首先注意到你的DataFrame中number列存在非数值型数据(如34r),这会导致插值失败,所以第一步需要处理数据类型问题:

1. 数据预处理

将number列转为数值类型,无法转换的标记为NaN,可选择删除或保留:

import pandas as pd
import numpy as np

# 转换数值类型,无法转换的设为NaN
df['number'] = pd.to_numeric(df['number'], errors='coerce')
# 删除含NaN的行(若不需要此类数据)
df_clean = df.dropna().reset_index(drop=True)

2. 批量生成插值行

通过循环遍历每一对相邻行,用np.linspace生成包含首尾行的8个值(中间6个插值),最终合并为扩展后的DataFrame:

expanded_data = []

# 遍历每一对相邻行
for i in range(len(df_clean) - 1):
    start_val = df_clean['number'].iloc[i]
    end_val = df_clean['number'].iloc[i+1]
    # 生成8个均匀分布的值(含首尾,中间6个插值)
    interpolated_vals = np.linspace(start_val, end_val, num=8)
    # 将每个值加入列表
    expanded_data.extend([{'number': val} for val in interpolated_vals])

# 转换为最终的DataFrame
df_expanded = pd.DataFrame(expanded_data)

说明

  • 若原df_clean有9行(删除34r所在行后),扩展后行数为(9-1)*8=64,完全符合你的需求。
  • 若不想删除非数值行,可通过异常处理跳过或保留原行:
expanded_data = []

for i in range(len(df) - 1):
    try:
        start_val = float(df['number'].iloc[i])
        end_val = float(df['number'].iloc[i+1])
        interpolated_vals = np.linspace(start_val, end_val, num=8)
        expanded_data.extend([{'number': val} for val in interpolated_vals])
    except ValueError:
        # 遇到非数值时直接保留原两行
        expanded_data.append({'number': df['number'].iloc[i]})
        expanded_data.append({'number': df['number'].iloc[i+1]})

df_expanded = pd.DataFrame(expanded_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:06:25