Pandas如何将单列DataFrame按指定行数拆分生成多列新表
pandas按固定行数拆分单列生成多列DataFrame方案
报错原因
原代码硬编码了固定长度索引index=range(0,10),强制要求所有拆分后的列长度必须等于预设值。当原数据总行数不能被每列预设行数整除时,最后一个拆分块长度不足,就会触发ValueError: Length of values does not match length of index错误。
实现方案
不需要手动预设每列索引长度,pd.concat按列拼接时会自动按索引对齐,短列缺失位置自动填充NaN,直接按拆分块本身长度构造Series即可。
按「每列固定行数」拆分(自动计算总列数)
import pandas as pd import numpy as np # 配置每列存放的行数 per_col_rows = 8 # 提取待拆分的单列数据 target_arr = x['TEST'].values # 按步长切分数组,自动适配最后一块长度 split_chunks = [target_arr[i:i+per_col_rows] for i in range(0, len(target_arr), per_col_rows)] # 拼接为新DataFrame result = pd.concat( [pd.Series(chunk, name=f'y{idx}') for idx, chunk in enumerate(split_chunks)], axis=1 )
按「固定总列数」拆分(自动计算每列行数)
如果需要直接指定拆分后的总列数,用np.array_split切分即可,同样不需要硬编码索引:
# 配置拆分后的总列数 total_cols = 4 split_chunks = np.array_split(x['TEST'].values, total_cols) result = pd.concat( [pd.Series(chunk, name=f'y{idx}') for idx, chunk in enumerate(split_chunks)], axis=1 )
效果说明
以31行数据、每列拆8行为例,最终生成4列:前3列各8行数据,第4列7行数据,第8行索引位置第4列自动填充NaN,完全适配各拆分块的实际长度。
内容的提问来源于stack exchange,提问作者jvels
相关产品推荐
相关产品推荐

