Python实现DataFrame指定行数重排及反向转换方法求助
DataFrame重排与还原解决方案
1. 解决reshape报错问题
你代码里的错误是因为**reshape是numpy数组的方法,必须用圆括号()调用,而非方括号[]**。方括号用于索引数组元素,用在方法上会触发TypeError。
修正后的基础重排代码:
import pandas as pd import numpy as np dat = pd.DataFrame({'COL1' : ["A", "S", "D", "F", "G", "T", "Y", "U", "D"], 'COL2' : [3, 4, 5, 2, 4, 56, 7, 5, 5]}) dat_array = dat.to_numpy() # 用圆括号传参数,-1表示让numpy自动计算对应维度的长度 reshaped_array = dat_array.reshape(2, -1)
2. 指定行数重排DataFrame
重排的核心要求是:原始数据的总元素数必须等于目标行数×目标列数(否则reshape会报错)。你的原始DataFrame是9行2列,总元素数为18,因此可指定的行数需是18的约数(比如2、3、6、9等)。如果要指定4行,18无法被4整除,这种情况要么调整原始数据量,要么使用resize(但会填充重复/截断数据,不推荐)。
指定行数重排示例(以3行为例)
# 指定目标行数为3,自动计算列数 target_rows = 3 reshaped_array = dat_array.reshape(target_rows, -1) # 转回DataFrame,自定义列名 reshaped_df = pd.DataFrame(reshaped_array, columns=[f'NEW_COL_{i+1}' for i in range(reshaped_array.shape[1])]) print(reshaped_df)
运行输出:
NEW_COL_1 NEW_COL_2 NEW_COL_3 NEW_COL_4 NEW_COL_5 NEW_COL_6 0 A 3 S 4 D 5 1 F 2 G 4 T 56 2 Y 7 U 5 D 5
3. 从重排后的DataFrame还原原始结构
还原只需将重排后的数组再reshape回原始形状(9行2列),再转回DataFrame即可:
# 从重排后的DataFrame提取数组 restored_array = reshaped_df.to_numpy().reshape(9, 2) # 转回原始结构的DataFrame restored_df = pd.DataFrame(restored_array, columns=['COL1', 'COL2']) print(restored_df)
运行后会得到与原始dat完全一致的DataFrame。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

