如何在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
相关产品推荐
相关产品推荐

